假设我有一个像这样的xml文件
<a>
<b>
<c>
<n xmlns="http://www.abcd.com/play/soccer"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.abcd.com/bgft">
<document>
<docbody>
......
......
......
</docbody>
</document>
</n>
</c>
</b>
</a>
我想渲染xml并使用xslt在新元素下复制该部分。但问题是我无法使用元素中的那些名称空间呈现xml。所以我必须通过xslt删除这些命名空间,但我需要输出xml中的那些名称空间。我的输出xml应该是这样的。
<m>
<n>
<o>
<n xmlns="http://www.abcd.com/play/soccer"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.abcd.com/bgft">
<abc>
<document>
<docbody>
......
......
......
</docbody>
</document>
</abc>
</n>
</o>
</n>
</m>
这是一个新元素
如何通过元素删除命名空间并复制最终输出中的amd retain命名空间?请帮忙。
答案 0 :(得分:1)
我不明白为什么要删除然后恢复名称空间。如果您只是复制c
元素的子节点,同时将其转换为o
元素,那么您就完成了:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="c">
<o>
<xsl:apply-templates/>
</o>
</xsl:template>
<xsl:template match="a">
<m>
<xsl:apply-templates/>
</m>
</xsl:template>
<xsl:template match="b">
<n>
<xsl:apply-templates/>
</n>
</xsl:template>
答案 1 :(得分:0)
此处没有“添加”或“删除”任何名称空间,您只是将元素名称a
,b
和c
(在没有名称空间中)转换为{{ 1}},m
和n
(也在无命名空间中)并在原始o
元素及其子元素之间的abc
命名空间中添加http://www.abcd.com/play/soccer
元素
{http://www.abcd.com/play/soccer}n