2017-04-06 112 views
0

我需要使用XSLT从根元素删除名称空间方面的帮助。如何删除XML的根元素的名称空间

电流:

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:root xmlns:ns0="dfsafas.fsafs"> 
    <ns0:element1>abda</ns0:element1> 
    <ns0:element2>abda</ns0:element2> 
    <ns0:element3>abda</ns0:element3> 
</ns0:root> 

预计:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:ns0="dfsafas.fsafs"> 
    <ns0:element1>abda</ns0:element1> 
    <ns0:element2>abda</ns0:element2> 
    <ns0:element3>abda</ns0:element3> 
</root> 

我去除所有命名空间的一些解决方案,但要求是只为第一要素。

这是我的XSLT-1.0的方法:

<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" /> 
    <xsl:template match=""> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@ | node()"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+4

请张贴您是否尝试过XSLT。并提及您使用的XSLT版本。 –

+0

我包含了来自注释的XSLT-1.0代码,并且还更改了标题和一些拼写。 – zx485

回答

0

这会为你工作。请注意,名称空间的URI现在将返回到元素*节点中。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:ns0="dfsafas.fsafs" 
exclude-result-prefixes="msxsl"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" /> 

<xsl:template match="/*"> 
    <xsl:element name="{local-name()}"> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

+0

你原来的答案好多了。现在你的代码太多了。 –

+0

嗨同样,我更改了代码以使其通用。因此,这个XSLT将从任何XML的根节点删除命名空间。思考过后,我认为这是提问的人之后。这就是说,请随时重新发布我的原始答案。 – Bluewood66

+0

“*从任何XML *的根节点删除名称空间”也可以使用单个模板(除* identity transform *模板)并且不使用模式来完成。只需使用''。 –

相关问题