2

我的 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>
   

我需要选择名称为“Iam”的 <parent> 下所有名称为“wii”的 <toy> 节点。请注意,<toy> 可以是 <parent> 的直接子代,也可以是 <parent> 的孙子代(在 <child> 下)

<child>节点可以有 0 个或多个基数。

我尝试将此 xpath /parent[@name='Iam']/*/toy[@name='wii']与 XPathNavigator 一起使用。

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

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

我需要 xpath 来选择 <parent> 和 <toy> 之间具有 0 或更多基数的所有节点。

我无法更改 XML 的格式。

4

1 回答 1

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);
        }

希望这是您正在寻找的。

干杯!

于 2012-08-21T23:24:09.333 回答