msxml selectnodes:文本节点中的命名空间

时间:2011-03-01 15:20:58

标签: xpath msxml

我必须关注XML文件:

<root xmlns="http://someurl/element" xmlns:text="http://someurl/text">
   <elements>
     <element>
       <Id>text:SOME_ID</Id>
       <!-- some other elements -->
     </element>
     <element>
       <!-- some other elements -->
       <reference>
          <link ref="text:SOME_ID" />
       </refernce>
     </element>
   </elements>
</root>

我想从elment节点中选择Id=text:SOME_ID节点中具有元素reference的所有子元素。我想通过使用msxml解析器中selectNodes对象的IXMLDOMNode方法在C ++中执行此操作。

在以下例子中,我在pChild中选择了refence节点,并将SelectionNamespaces propetey设置为xmlns:n="http://someurl/element"

MSXML2::IXMLDOMNodePtr pSelectedNodes =
    pChild->selectNodes("../../n:element[n:Id=n:link/@ref]/n:*");
__ASSERT(pSelectedNodes->length > 0)

这不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

XPath查询的n:link/@ref部分在应用条件条件的元素的上下文中进行评估;在这种情况下../../n:element 您无法在条件部分中引用整体上下文;换句话说,上下文节点在[方括号]的内部和外部是不同的。

我担心您必须单独提取pChild->selectSingleNode("n:link/@ref")->text,并“手动”将其插入到XPath查询中。