我必须关注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)
这不起作用。我做错了什么?
答案 0 :(得分:1)
XPath查询的n:link/@ref
部分在应用条件条件的元素的上下文中进行评估;在这种情况下../../n:element
您无法在条件部分中引用整体上下文;换句话说,上下文节点在[方括号]的内部和外部是不同的。
我担心您必须单独提取pChild->selectSingleNode("n:link/@ref")->text
,并“手动”将其插入到XPath查询中。