需要建议: 我有一个XML文件,其默认命名空间(xmlns =" http:// apr")需要删除,同时保留其余的命名空间
<p:Value xmlns:p="http://www.test.be/communication/xml/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test/communication/xml/v2 sample.xsd ">
<Data xmlns ="http://apr"> Extra name space add using xslt need to remove this
<Name>Apple</Name>
</Data>
</p:Value>
答案 0 :(得分:0)
有些观点:
始终记住元素的名称是(命名空间, localname)pair。
如果你得到一个元素的名称(在结果树中),那么 命名空间声明将自行处理
您需要更改http://apr命名空间中元素的名称 从(“http://apr”,*)到(“”,*)
要实现这一目标,您需要模板规则:
<xsl:template match="apr:*" xmlns:apr="http://apr">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
答案 1 :(得分:0)
尝试以下代码
<xsl:template match="p:Value" xmlns:p="http://www.test.be/communication/xml/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test/communication/xml/v2 sample.xsd ">
<p:Value xmlns:p="http://www.test.be/communication/xml/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test/communication/xml/v2 sample.xsd ">
<xsl:apply-templates/>
</p:Value>
</xsl:template>
<xsl:template match="*" >
<xsl:element name="{name()}" >
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在上面的代码中,第一个xsl:template match =&#34; p:Value&#34;将在获取元素后立即调用然后它将使用该模板中提到的相应名称空间推送元素。 稍后它调用apply-templates,因此它将重定向到下一个模板,匹配=&#34; *&#34; 在该模板中,我们不添加名称空间元素,因此它将删除所有其他元素的名称空间。
此致 Vikrant Korde。