我需要帮助才能使用XSLT从root元素中删除命名空间。
当前:
<?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>
答案 0 :(得分: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>
答案 1 :(得分:0)
尝试此操作,它将仅从根元素中删除名称空间,而不会将其复制到其他元素中。
在尝试使用Tibco Rest&Json Plugin从xml渲染json array 遇到问题后,我找到了解决方案,因此我将xml转换为仅摆脱第一个名称空间,然后对其进行渲染。 (仅保留根元素以保持xml有效和严格)
<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="*"/>
<!-- remove namespaces -->
<xsl:template match="/*">
<xsl:element name="{local-name()}" >
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!-- keep namespace of root element -->
<xsl:template match="*">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
对于此XML:
<?xml version = "1.0" encoding = "UTF-8"?>
<ns0:rootElement xmlns:ns0 = "http://www.tibco.com/namespaces/tnt/plugins/json">
<ns1:child xmlns:ns1="http://www.yourscheme.com">
<ns1:Name>Aviv</ns1:Name>
<ns1:Age>22</ns1:Age>
</ns1:child>
<ns1:child xmlns:ns1="http://www.yourscheme.com">
<ns1:Name>Joe</ns1:Name>
<ns1:Age>Doe</ns1:Age>
</ns1:child>
</ns0:rootElement>
您将得到以下结果:
<rootElement>
<ns1:child xmlns:ns1="http://www.yourscheme.com">
<ns1:Name>Aviv</ns1:Name>
<ns1:Age>22</ns1:Age>
</ns1:child>
<ns1:child xmlns:ns1="http://www.yourscheme.com">
<ns1:Name>Joe</ns1:Name>
<ns1:Age>Doe</ns1:Age>
</ns1:child>
</rootElement>