2017-02-20 1 views
0

는 다음과 같은 예를 들어 XML 파일을 감안할 때? 예 : 제가 첫 번째 라이브러리 요소에 있었고 모든 자손/자식을 검색하려고하면 그 안에있는 두 권의 책으로 만 반환됩니다.하여 XDocument 순회 이상의 XML 요소

XElement.Elements ("book"), XElement.Elements(), XElement.Descendants() 등을 사용하여 반복 시도해 보았지만 모두 모든 요소를 ​​반환합니다 (따라서 요소를 가져옵니다. 두 번째 라이브러리에서도 마찬가지입니다. 주로 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

쉬어,

문제는 "책"으로 모든 요소를 ​​가져 오는 것입니다.

상위 요소에 종속 된 항목 만 얻으려면 적절한 조건을 제공해야합니다.

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

이제 이름이 "some library"인 요소가 제공됩니다.