C ++ MSXML2 - 从XML中删除命名空间

时间:2009-02-20 11:17:38

标签: c++ xml namespaces

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

目前无法看到任何可以执行此操作的方法

由于

1 个答案:

答案 0 :(得分:1)

没有直接执行此操作的方法,因为命名空间+ 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>

使用默认模板规则处理文本节点,这应该有效(但未经测试)。