2011-03-21 2 views
0
<root> 
    <node1>value1</node1> 
    <node2>something</node2> 
    <something>somevalue</something> 
<root> 

위의 XML 예제에서 'somevalue'값을 가져 오는 XPath를 만드는 방법은 무엇입니까? 태그 something 자체는 몇 가지 다른 값이한 노드의 값을 노드 자체로 사용하는 방법

<node2>anything</node2> 
<anything>somevalue</anything> 

무엇인가/무엇이든 태그를 아래와 같이 궁극적으로 태그로 anything을 가진 초래 어떤 anything 말할 수있다 미래 <node2>에서 <node2>

의 값 것 <node2>에 따라 달라질 수 있습니다.

위의 경우에 XPath를 작성하는 방법은 무엇입니까?

답변

0

이 코드에는 몇 가지 방법이 포함되어 있습니다. 후자는 하나의 XPath 문을 사용하여

public void DoXML() 
{ 
    System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
    doc.LoadXml("<root><node1>value1</node1><node2>something</node2><something>somevalue</something></root>"); 

    //Option 1 - two statements 
    string nodeName = doc.DocumentElement.SelectSingleNode("node2").InnerText; 
    string value1 = doc.DocumentElement.SelectSingleNode(nodeName).InnerText; 
    Console.WriteLine(value1); 

    //Option 2 - single statement 
    string value2 = doc.DocumentElement.SelectSingleNode("node()[name() = ../node2]").InnerText; 
    Console.WriteLine(value2); 

} 
0

다음 XPath는 작동합니다 :

/root/*[name()=/root/node2] 

그것은/루트/노드 2의 값과 동일한 이름을 가진 노드를 돌려줍니다. 영업 이익의 의견에서

+0

감사합니다, 나는 페치 될 필요가 값이 someValue와는 XYZ 다음과 같은 고정되어 다른 태그의 일부라고 언급에 잊었다 또는 ** 일부 값 ** xyz finepax007

0

는 XML 문서가 더 복잡하다는 분명해진다 :

사용 :

/*/*[name() = /*/node2]/tag1 

또는 사용 :

string(/*/*[name() = /*/node2]/tag1) 

또는 사용 :

/*/*[name() = /*/node2]/text()[1] 

또는 사용 :

string(/*/*[name() = /*/node2]/text()[1]) 
관련 문제