如何替换xml中子元素的命名空间? 例如,我有这个源文件:
<ns:Parent xmlns:ns="http://test.com">
<ns:Name>John</ns:Name>
<ns:Country>Japan</ns:Country>
<ns:Contact>9999999</ns:Contact>
</ns:Parent>
我的输出应该是这样的:
<ns:Parent xmlns:ns="http://test.com">
<ns1:Name xmlns:ns1="http://development.com">John</ns1:Name>
<ns:Country>Japan</ns:Country>
<ns:Contact>9999999</ns:Contact>
</ns:Parent>
所以基本上除了Name之外的所有其他字段都没有受到影响。
答案 0 :(得分:1)
首先从identity template开始,处理复制您不想更改的所有节点
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
然后,只需添加一个模板以匹配ns:Name
,您可以在所需的命名空间中创建一个新节点(ns1
元素上定义了xsl:stylesheet
)
<xsl:template match="ns:Name">
<ns1:Name>
<xsl:apply-templates select="@*|node()"/>
</ns1:Name>
</xsl:template>
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:ns="http://test.com"
xmlns:ns1="http://development.com">
<xsl:output method="xml" indent="yes" />
<xsl:template match="ns:Name">
<ns1:Name>
<xsl:apply-templates select="@*|node()"/>
</ns1:Name>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>