我有一个结构有点像这样的 xml 文档:-
<catalog xmlns="format_old" xmlns:final="format_new">
<final:book>
<final:title>blah</final:title>
<final:author>more blah</final:author>
</final:book>
<book>
<description title="blah2"/>
<writer name="more blah2"/>
</book>
</catalog>
显然,这是问题的简化版本。我想要做的是将它转换成类似的东西: -
<catalog xmlns="format_new">
<book>
<title>blah</title>
<author>more blah</author>
</book>
<book>
<title>blah2</title>
<author>more blah2</author>
</book>
</catalog>
我现在拥有的样式表是这样的:-
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:orig="format_old"
xmlns="format_new"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="//orig:book">
<xsl:element name="title">
<xsl:value-of select="./orig:description/@title" />
</xsl:element>
<xsl:element name="author">
<xsl:value-of select="./orig:writer/@name" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这给了我这样的输出:-
<catalog xmlns="format_old">
<book xmlns="format_new">
<title>blah</title>
<author>more blah</author>
</book>
<book xmlns:orig="format_old" xmlns="format_new">
<title>blah2</title>
</author>more blah2</author>
</book>
</catalog>
这个样式表有两个问题:-
1.)(主要问题)根元素被复制而不是更改根元素的默认命名空间。所以基本上目录元素仍然在命名空间 format_old 中。
2.)(小问题)这会将元素转换为:-
<book xmlns:orig="format_old" xmlns="format_new">
...
</book>
而不是从根元素中获取命名空间,因为它保持不变
<book>
...
</book>
我在这里想念什么?我正在使用 Xalan-C。