如何从所有元素中删除前缀urn,从根节点中删除前缀execept?
XML输入
<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'>
<urn:header>
<urn:desc1>undefined</urn:desc1>
<urn:desc2>undefined</urn:desc2>
</urn:header>
<urn:itens1>
<urn:item1>undefined
<urn:name1>undefined</urn:name1>
<urn:name2>undefined</urn:name2>
</urn:item1>
</urn:itens1>
<urn:itens2>
<urn:item1>undefined
<urn:name1>undefined</urn:name1>
<urn:name2>undefined</urn:name2>
</urn:item1>
<urn:item2>undefined
<urn:name1>undefined</urn:name1>
<urn:name2>undefined</urn:name2>
</urn:item2>
</urn:itens2>
</urn:client>
XML输出
<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'>
<header>
<desc1>undefined</desc1>
<desc2>undefined</desc2>
</header>
<itens1>
<item1>undefined
<name1>undefined</name1>
<name2>undefined</name2>
</item1>
</itens1>
<itens2>
<item1>undefined
<name1>undefined</name1>
<name2>undefined</name2>
</item1>
<item2>undefined
<name1>undefined</name1>
<name2>undefined</name2>
</item2>
</itens2>
</urn:client>
我尝试使用以下XSLT代码
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
但是,根节点中的前缀和命名空间也将被删除。
你们有什么想法吗?
Tks
怎么样:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这假设输入XML中的属性不在名称空间中(通常是这样)。事实上,给定的示例根本没有属性,因此可以完全删除<xsl:copy-of select="@*"/>
指令。