2016-08-08 7 views
1

いくつかのノードの深さが異なるXMLファイルがあります。特定の深さのノードのみを読み込むコードが必要ですが、すべてではなく、C#のXmlReaderを使用することによってのみ読み込むことができます。C#でXmlReaderを使用して特定の深さのXML要素を読み取る

誰かが私を助けることができますか?

以下は私のXML構造です。私は "Depth2"ノードだけを読みたいと思う。

<Depth0> 
    <Depth1> 
     <Depth2/> 
     <Depth2/> 
     <Depth2/> 
    </Depth1> 
    <Depth1> 
     <Depth2/> 
     <Depth2/> 
     <Depth2/> 
    </Depth1> 
    <Depth1> 
     <Depth2/> 
     <Depth2/> 
     <Depth2/> 
    </Depth1> 
</Depth0> 

コード:

using (var reader = XmlReader.Create("D:\\xyz.xml")) 
{ 
    while (reader.Read()) 
    { 
     if (reader.Depth == 4 && reader.NodeType == XmlNodeType.Element) 
     { 
      XmlReader chnode = reader.ReadSubtree(); 
      AddItems(chnode); 
     } 
     else 
      reader.MoveToElement(); 
     } 
} 
+0

あなたは何を試してみましたか?何を見上げたのですか?あなたのxmlの例を追加してください。 –

+0

Hi Gilad Green、 お返事ありがとうございます。 –

答えて

1

あなたはDescendants機能を使用することができます:それはあなたのための任意の場所にXMLのRoot


の下にあるすべての Depth2の要素を見つけます

var result = XDocument.Load("data.xml").Root 
         .Descendants("Depth2"); 

をあなたができるXmlReader方法については

List<XmlNode> nodes = new List<XmlNode>(); 
using (var reader = XmlReader.Create("data.xml")) 
{ 
    XmlDocument document = new XmlDocument(); 
    while (reader.Read()) 
    { 
     if (reader.Depth == 2 && reader.NodeType == XmlNodeType.Element) 
     { 
      XmlNode node = document.CreateNode(XmlNodeType.Element, reader.Name, ""); 
      //Here I just added all the inner xml but you can do whatever you need 
      node.InnerXml = reader.ReadInnerXml(); 

      nodes.Add(node); 
     } 
     reader.MoveToElement(); 
    } 
} 
+0

XMLReaderだけを使ってこれを行う必要があります。 –

+0

ありがとうGiladGreen、plz私のコードを見てください。 –

+0

@kiranreddy - これは問題の解決に役立ちましたか? –

関連する問題