Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XPath用于选择特定节点下的节点,该节点之间有零个或多个节点_C#_Xpath_Xml Parsing_Xpathnavigator - Fatal编程技术网

C# XPath用于选择特定节点下的节点,该节点之间有零个或多个节点

C# XPath用于选择特定节点下的节点,该节点之间有零个或多个节点,c#,xpath,xml-parsing,xpathnavigator,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"

我的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>
   
这显然是错误的,因为它失败了

我需要xpath来选择基数为0或更多的和之间的所有节点


我无法更改XML的格式。

这似乎对我有效:

        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);
        }
希望这就是你想要的


干杯

我没有尝试使用XPathNavigator,但是在XPath中,双正斜杠
/
将返回所有匹配项-请参阅
        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);
        }