1

親ノード内の特定のノードを検索したいのですが、

私はそれをこのようにしようとしました:

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 >

正しい値を取得できません。彼は、親ノードの最初のノードではなく、名前を持つ最初のノードを取得しているようです。(私は1000ではなく0を取得します)

4

1 に答える 1

0

// GetNodeValueが原因で、xpathクエリがルートディレクトリから開始されています。GetNodeValueメソッドから//を削除します。

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

次のようにドキュメントをクエリすることもできます。

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

ちなみに、投稿したxmlは無効です。 NodeChildeName2には、 NodeChildeName1の終了タグがあります

于 2013-03-13T13:49:53.523 に答える