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>
   

name="Iam" の <parent> の下にある name="wii" のすべての <toy> ノードを選択する必要があります。<toy> は <parent> の直接の子または <parent> の孫 (<child> の下) であることに注意してください。

<child>node は 0 以上のカーディナリティを持つことができます。

この xpath /parent[@name='Iam']/*/toy[@name='wii']を XPathNavigator で使用してみました。

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

失敗するので明らかに間違っています。

<parent> と <toy> の間のカーディナリティが 0 以上のすべてのノードを選択するには、xpath が必要です。

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 に答える