2017-02-20 7 views
0

は、次のようなXMLファイルの例を考えると?例えば。私が最初の図書館の要素にあって、その子孫/子どもをすべて検索すると、その中の2冊の本だけが返されます。XDocument反復処理以上のXML要素

私は、XElement.Elements( "book")、XElement.Elements()、XElement.Descendants()などを使って反復しようとしましたが、すべてすべての要素を返します(したがって、 2番目のライブラリからも)。私は、XDocumentがどのように要素を追跡し、子孫と見なされているのかを理解することだけに苦しんでいると思います。

可能であれば、どんなレベルの要素でもXDocumentを使ってどのようにこれを行うのか説明できれば分かります(例えば、各図書に子要素があった場合、それらの要素に子要素がある場合など) 。

答えて

0

次のようにして、ライブラリのすべての子孫を調べることで、XMLを反復処理できます。

XDocument doc=XDocument.Load(XmlPath); 
    foreach (var item in doc.Descendants("library")) 
    IEnumerable<XNode> nodes = item.DescendantNodes();//Here you got book nodes within a library 
+0

が、これは、私がtypo'dていたと)(item.DescendantNodes対IEnumerableをノードを=のdoc.DescendantNodes()何をやっていた私は眠い状態の最後の夜を除いてしようとしていたあることが判明しました。これは私が探していたものです。ありがとうございました! – Sheer

0

Sheer、

問題は「ブック」ですべての要素を引き出していることです。

親要素に依存する項目のみを取得する場合は、適切な条件を指定する必要があります。

var v = from n in doc.Descendants("library") 
       where n.Attribute("name").Value == "some library" 
       select n.DescendantNodes(); 

これで、名前が「some library」の要素が得られます。