删除 ns0 和 ns1 前缀并在所有带有 XSL 的标记中包含一个新前缀
Remove ns0 and ns1 prefix and include a new prefix in all tags with XSL
我需要帮助来创建 XSLT 映射,以删除所有前缀 ns(NS0、NS1 等)并在所有标记中包含新前缀。
下面XML de input and output 为examplification。
输入
<ns0:ExecuteMultipleOperations xmlns:ns0="http://www.example.com">
<ns0:Operations>
<ns0:Operation>
<ns0:Action>Create</ns0:Action>
<ns0:Object>
<ns1:SOUser xmlns:ns1="http://www.example.com">
<ns1:FullName>My Full Name</ns1:FullName>
<ns1:EmailAddress>name@fake.mail</ns1:EmailAddress>
<ns1:Active>1</ns1:Active>
</ns1:SOUser>
</ns0:Object>
</ns0:Operation>
</ns0:Operations>
<ns0:OneTransaction>true</ns0:OneTransaction>
<ns0:ContinueOnError>true</ns0:ContinueOnError>
</ns0:ExecuteMultipleOperations>
输出
<clic:ExecuteMultipleOperations xmlns:clic="http://www.example.com">
<clic:Operations>
<clic:Operation>
<clic:Action>Create</clic:Action>
<clic:Object>
<clic:SOUser>
<clic:FullName>My Full Name</clic:FullName>
<clic:EmailAddress>name@fake.mail</clic:EmailAddress>
<clic:Active>1</clic:Active>
</clic:SOUser>
</clic:Object>
</clic:Operation>
</clic:Operations>
<clic:OneTransaction>true</clic:OneTransaction>
<clic:ContinueOnError>true</clic:ContinueOnError>
</clic:ExecuteMultipleOperations>
有什么建议吗?
请尝试下面的 XSLT,它匹配所有具有前缀 ns0
和 ns1
的元素,并将它们的名称替换为 clic
前缀。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:clic="http://www.example.com"
xmlns:ns0="http://www.example.com"
xmlns:ns1="http://www.example.com">
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="ns0:* | ns1:*">
<xsl:element name="clic:{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出
<clic:ExecuteMultipleOperations xmlns:clic="http://www.example.com">
<clic:Operations>
<clic:Operation>
<clic:Action>Create</clic:Action>
<clic:Object>
<clic:SOUser>
<clic:FullName>My Full Name</clic:FullName>
<clic:EmailAddress>name@fake.mail</clic:EmailAddress>
<clic:Active>1</clic:Active>
</clic:SOUser>
</clic:Object>
</clic:Operation>
</clic:Operations>
<clic:OneTransaction>true</clic:OneTransaction>
<clic:ContinueOnError>true</clic:ContinueOnError>
</clic:ExecuteMultipleOperations>
我需要帮助来创建 XSLT 映射,以删除所有前缀 ns(NS0、NS1 等)并在所有标记中包含新前缀。
下面XML de input and output 为examplification。
输入
<ns0:ExecuteMultipleOperations xmlns:ns0="http://www.example.com">
<ns0:Operations>
<ns0:Operation>
<ns0:Action>Create</ns0:Action>
<ns0:Object>
<ns1:SOUser xmlns:ns1="http://www.example.com">
<ns1:FullName>My Full Name</ns1:FullName>
<ns1:EmailAddress>name@fake.mail</ns1:EmailAddress>
<ns1:Active>1</ns1:Active>
</ns1:SOUser>
</ns0:Object>
</ns0:Operation>
</ns0:Operations>
<ns0:OneTransaction>true</ns0:OneTransaction>
<ns0:ContinueOnError>true</ns0:ContinueOnError>
</ns0:ExecuteMultipleOperations>
输出
<clic:ExecuteMultipleOperations xmlns:clic="http://www.example.com">
<clic:Operations>
<clic:Operation>
<clic:Action>Create</clic:Action>
<clic:Object>
<clic:SOUser>
<clic:FullName>My Full Name</clic:FullName>
<clic:EmailAddress>name@fake.mail</clic:EmailAddress>
<clic:Active>1</clic:Active>
</clic:SOUser>
</clic:Object>
</clic:Operation>
</clic:Operations>
<clic:OneTransaction>true</clic:OneTransaction>
<clic:ContinueOnError>true</clic:ContinueOnError>
</clic:ExecuteMultipleOperations>
有什么建议吗?
请尝试下面的 XSLT,它匹配所有具有前缀 ns0
和 ns1
的元素,并将它们的名称替换为 clic
前缀。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:clic="http://www.example.com"
xmlns:ns0="http://www.example.com"
xmlns:ns1="http://www.example.com">
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="ns0:* | ns1:*">
<xsl:element name="clic:{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出
<clic:ExecuteMultipleOperations xmlns:clic="http://www.example.com">
<clic:Operations>
<clic:Operation>
<clic:Action>Create</clic:Action>
<clic:Object>
<clic:SOUser>
<clic:FullName>My Full Name</clic:FullName>
<clic:EmailAddress>name@fake.mail</clic:EmailAddress>
<clic:Active>1</clic:Active>
</clic:SOUser>
</clic:Object>
</clic:Operation>
</clic:Operations>
<clic:OneTransaction>true</clic:OneTransaction>
<clic:ContinueOnError>true</clic:ContinueOnError>
</clic:ExecuteMultipleOperations>