2013-03-13 2 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

Смежные вопросы