【问题标题】:C++ MSXML2 - Remove Namespace from XMLC++ MSXML2 - 从 XML 中删除命名空间
【发布时间】:2009-02-20 11:17:37
【问题描述】:

我需要一种能够从 C++ 中的 XML 文档中删除所有命名空间的好方法。目前该文档已加载到 MSXML2::IXMLDOMDocument2Ptr 类中。

目前看不到任何可以做到这一点的方法

谢谢

【问题讨论】:

    标签: c++ xml namespaces


    【解决方案1】:

    没有办法直接做,因为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>
    

    使用默认模板规则来处理文本节点,这应该可以工作(但未经测试)。

    【讨论】: