我有这个XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NAXML-MaintenanceRequest version="3.4" xmlns="http://www.naxml.org/POSBO/Vocabulary/2003-10-16">
<TransmissionHeader>
<StoreLocationID>AB123</StoreLocationID>
<VendorName>VeriFone</VendorName>
<VendorModelVersion>Commander Site Controller</VendorModelVersion>
</TransmissionHeader>
<ComboMaintenance>
<TableAction type="initialize"/>
<RecordAction type="addchange"/>
</ComboMaintenance>
</NAXML-MaintenanceRequest>
我想到达这里,只需删除xmlns=""
节点上的NAXML-MaintenanceRequest
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NAXML-MaintenanceRequest version="3.4">
<TransmissionHeader>
<StoreLocationID>AB123</StoreLocationID>
<VendorName>VeriFone</VendorName>
<VendorModelVersion>Commander Site Controller</VendorModelVersion>
</TransmissionHeader>
<ComboMaintenance>
<TableAction type="initialize"/>
<RecordAction type="addchange"/>
</ComboMaintenance>
</NAXML-MaintenanceRequest>
我已经看到了删除其他元素(而不是根节点)上默认名称空间的方法。有人可以指出我的资源/提供一个可以摘除根节点上默认名称空间的代码段吗?
答案 0 :(得分:3)
首先,停止并考虑是否确实应该从XML中删除名称空间。 XML名称空间在词汇管理中起着重要的作用。尽管它们带来了一些麻烦,但是能够管理XML词汇表是一个巨大的优势,因此不应无缘无故地克服它。
从机械上讲,是的,XSLT是从一个XML文档映射到另一个XML文档的理想工具,并且可以轻松地从名称空间中删除元素...
只需修改identity转换即可按原样复制所有节点上的内容,除了专门处理元素之外,将其从任何名称空间中删除:
<?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="@*|processing-instruction()|comment()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
<xsl:template match="@*|processing-instruction()|comment()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:if test="@version">
<xsl:attribute name="version">
<xsl:value-of select="@version"/>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="m:TableAction">
<xsl:element name="{ local-name()}">
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="m:RecordAction">
<xsl:element name="{ local-name()}">
<xsl:apply-templates select="@*"/>
</xsl:element>
</xsl:template>
check it