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

如何在上面的XML示例中構造一個可以獲取值'somevalue'的XPath? 標籤something本身就是<node2>如何將一個節點的值用作節點本身

的值。在未來<node2>可能有一些不同的價值說anything 這最終將導致其anything作爲標記如下圖所示

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

什麼/任何標籤會在那裏取決於<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中是固定像下面 ** ** someValue中 XYZ ** somevalue ** xyz finepax007 2011-03-21 10:11:35

0

從OP的意見很清楚,XML文檔更加複雜:

使用

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

或使用:

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

或使用:

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

或使用:

string(/*/*[name() = /*/node2]/text()[1]) 
相關問題