2011-03-01 3 views
2

에서 네임 스페이스 내가 가지고있는 XML 파일을 다음은 :MSXML의 selectnodes : 텍스트 노드

<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> 

나는 reference 노드에서 요소 Id=text:SOME_ID이있는 elment 노드의 모든 자식 요소를 선택합니다. 나는 C++에서의 방법을 사용하여이 작업을 수행하려고합니다.이 방법은 msxml 파서의 IXMLDOMNode 개체를 사용합니다. 내가 pChild에서 선택한 refence 노드와 SelectionNamespaces propetey 세트가 다음 exmaple에서

xmlns:n="http://someurl/element"에 :

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

이 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

@ user141478 : 문제는 내부 컨텍스트 필터 내부에서 외부 컨텍스트를 사용해야한다는 것입니다. 그것은 XPath 1.0에서는 가능하지 않습니다. XPath 2.0에서는 다음을 할 수 있습니다 :'for $ current in. return/*/*/n : 요소 [n : Id eq $ current/@ ref]' –

답변

1

XPath 쿼리의 일부는 조건부 기준이 적용되는 요소의 컨텍스트에서 계산됩니다. 이 경우에는 ../../n:element입니다.
조건부 섹션에서 전체 컨텍스트를 참조 할 수 없습니다. 다시 말해 컨텍스트 노드는 대괄호 안과 밖에서 서로 다릅니다.

pChild->selectSingleNode("n:link/@ref")->text을 따로 추출해야하며 '수동으로'입력하여 XPath 쿼리에 삽입해야합니다.

관련 문제