用于在特定节点下选择节点的XPath,其间具有零个或多个节点

时间:2012-08-21 22:31:58

标签: c# xpath xml-parsing xpathnavigator

我的Xml看起来像这样     


      <root>
       <parent name="Iam">
          <child1 name="123">
              <toy name="wii">
              </toy>
          </child>
       </parent>
       <parent name="Iam">
          <toy name="wii">
          </toy>
       </parent>
       <parent name="Sam">
          <child1 name="999">
             <toy name="xbox">
             </toy>
           </child>
        </parent>
      </root>
   

我需要选择所有&lt; toy&gt;名称=“wii”的节点在&lt; parent&gt;下名字=“Iam”。请注意&lt; toy&gt;可以是&lt; parent&gt;的直接子项或&lt; parent&gt;的孙子(在&lt; child&gt;下)

&lt; child&gt;节点可以有0或更多基数。

我尝试在XPathNavigator中使用此xpath / parent [@ name ='Iam'] / * / toy [@ name ='wii']

`XPathNodeIterator nodeIter = schemaNavigator.Select(schemaXPath, namespaceMgr);`

这显然是错误的,因为它失败了。

我需要xpath来选择&lt; parent&gt;之间的所有节点和&lt;玩具&gt;基数为0或更多的基数。

我无法更改XML的格式。

1 个答案:

答案 0 :(得分:3)

这似乎对我有用:

        string schemaXPath = "//parent[@name='Iam']//toy[@name='wii']";
        XPathNavigator schemaNavigator  = oXmlDocument.CreateNavigator();
        XPathNodeIterator nodeIter = schemaNavigator.Select(schemaXPath, namespaceMgr);

        while (nodeIter.MoveNext() == true)
        {
            Console.WriteLine(nodeIter.Current.Name);
        }

希望这就是你要找的东西。

干杯!