2013-03-13 107 views
0

我想父節點中搜索一個特定節點,搜索節點 - XML

我試圖做這樣說:

public string GetNodeValue(XmlNode myNode, string nodeName, string parentName) 
{ 
    return myNode.SelectSingleNode("//"+parentName).SelectSingleNode("//"+nodeName).InnerText; 
} 

private void SetXmlFile(string path) 
    { 
     XmlDocument _doc = new XmlDocument(); 
     _doc.Load(path); 

     foreach (XmlNode node in _doc.SelectNodes("//MyNodeName")) 
     { 
      GetNodeValue(node,"NodeChildeName1","NodeParentName2"); 
     } 

    } 

我的XML看起來是這樣的:

<SomeNode Name="x"> 
    <a>a1</a> 
    <a>a2</a> 
    <a>a3</a> 
</SomeNode > 
<MyNodeName Name="a1"> 
    <NodeParentName1> 
     <NodeChildeName1>0</NodeChildeName1> 
     <NodeChildeName2>40</NodeChildeName1>  
    </NodeParentName1> 
    <NodeParentName2> 
     <NodeChildeName1>1000</NodeChildeName1> 
     <NodeChildeName2>70</NodeChildeName1>  
    </NodeParentName2> 
</MyNodeName > 

我沒有得到正確的值,似乎他採取的第一個節點有名稱,而不是父節點的第一個節點。 (我得到0而不是1000)

回答

0

//在GetNodeValue中導致您的xpath查詢從根目錄開始。從你的GetNodeValue方法中刪除//。

public string GetNodeValue(XmlNode myNode, string nodeName, string parentName) 
{ 
    return myNode.SelectSingleNode(parentName).SelectSingleNode(nodeName).InnerText; 
} 

你也可以只查詢doucment像這樣:

_doc.SelectSingleNode("//MyNodeName/NodeParentName2/NodeChildeName1").InnerText 

順便說一句,您發佈的XML是無效的。 NodeChildeName2已結束標記NodeChildeName1