XSLT 删除一些属性

Mik*_*ike 4 xml xslt

我有以下 XML,它可以以任一形式出现在我的 XML 文档中:

<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns=http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

或者

<Message xmlns="http://www.thenamespace.com">

我需要输出为:

<Message xmlns="http://www.theNEWnamespace.com">

我目前有这个模板来处理两种 xml 可能性的较短版本:

<xsl:template match="*">
  <xsl:element name="{name()}" namespace="http://www.theNEWnamespace.com">
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

但是,这不会删除 xml 的 SchemeLocation 或 xmlns:xsi 部分(如果存在)。

我将如何调整上述内容来处理这两种可能性。

干杯,

编辑:XML结构:

<?xml version="1.0" encoding="utf-8"?>
<Message xsi:schemaLocation="http://www.location.com StructureFile.xsd" xmlns="http://www.thenamespace.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header>
    <Info></Info>
  </Header>
</Message>
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 5

这是一个完整的转换,产生了想要的结果

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="http://www.thenamespace.com">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="x:Message">
  <xsl:element name="{name()}" namespace="http://www.theNEWnamespace.com">
    <xsl:copy-of select="@*[not(name() = 'xsi:SchemaLocation')]"/>
    <xsl:apply-templates/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于以下 XML 文档时(未提供!):

<t>
  <Message
  xsi:SchemaLocation="http://www.location.com StructureFile.xsd"
  xmlns="http://www.thenamespace.com"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</t>
Run Code Online (Sandbox Code Playgroud)

产生了想要的正确结果:

<Message xmlns="http://www.theNEWnamespace.com"/>
Run Code Online (Sandbox Code Playgroud)