【发布时间】:2009-02-20 11:17:37
【问题描述】:
我需要一种能够从 C++ 中的 XML 文档中删除所有命名空间的好方法。目前该文档已加载到 MSXML2::IXMLDOMDocument2Ptr 类中。
目前看不到任何可以做到这一点的方法
谢谢
【问题讨论】:
标签: c++ xml namespaces
我需要一种能够从 C++ 中的 XML 文档中删除所有命名空间的好方法。目前该文档已加载到 MSXML2::IXMLDOMDocument2Ptr 类中。
目前看不到任何可以做到这一点的方法
谢谢
【问题讨论】:
标签: c++ xml namespaces
没有办法直接做,因为namespace+local-name本来就是节点的名字。命名空间不是在属性上添加的。
您需要使用全新的节点重新创建文档,但这可以在 XSLT 中更轻松地完成:
<xsl:template match='*'>
<xsl:element name='{local-name(.)}'>
<xsl:apply-templates select='*|@*|text()'/>
</xsl:element>
</xsl:template>
<xsl:template match='@*'>
<xsl:attribute name='{local-name(.)}'>
<xsl:value-of select='.'/>
</xsl:attribute>
</xsl:template>
使用默认模板规则来处理文本节点,这应该可以工作(但未经测试)。
【讨论】: