我在这方面遇到的麻烦比我应该做的要多,并且无法找到似乎正确的解决方案:
我想简单地使用 xslt 1.0 更改 XML 文档的名称空间 - 与 java 应用程序一起使用,使用 javax.xml.transform。
这是我的 xml 文档:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="http://namespace1.org" type="Document" version="V2_2">
<Content>
<Text>asdf</Text>
</Content>
</Root>
这就是它在转换后的样子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="http://namespace2.org" type="Document" version="V2_2">
<Content>
<Text>asdf</Text>
</Content>
</Root>
这是我的 xslt 代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://namespace2.org">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://namespace2.org">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这是我在转换后得到的实际输出:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Root xmlns:ns0="http://namespace2.org">2012-11-02T15:39:46.05+01:00DocumentV2_2<ns1:Content xmlns:ns1="http://namespace2.org">
<ns2:Text xmlns:ns2="http://namespace2.org">asdf</ns2:Text>
</ns1:Content>
</ns0:Root>
有很多前缀添加的方法,这是我不想要的。
通过使用以下 xlst,我已经能够摆脱 ns+increment 前缀:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://namespace2.org"
xmlns:cmp="http://namespace2.org"
exclude-result-prefixes="cmp">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="cmp:{name()}" namespace="http://namespace2.org">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
产生以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<cmp:Root xmlns:cmp="http://namespace2.org" type="Document" version="V2_2">
<cmp:Content>
<cmp:Text>asdf</cmp:Text>
</cmp:Content>
</cmp:Root>
但我无法摆脱“cmp”前缀。
有什么想法可以实现所需的输出吗?