2014-09-25 8 views
0

У меня есть большой, беспорядочный XML-файл, и я хочу получить ВСЕ элементов с тем же именем («Item» для этого сообщения), затем иметь возможность получать данные от детей каждого элемента.Не удается перебрать дочерние элементы возвращаемых XML-узлов в C#

До сих пор я возвратил список каждого элемента под названием «Item», используя этот код, который просто отображает URL пространства имен и «Элемент» в р теги:

XDocument doc = XDocument.Load(@"C:\inetpub\wwwroot\mysite\myxml.xml"); 
XNamespace ns = "http://www.mynamespace.com"; 
var nodes = doc.Descendants().Elements(ns + "Item").Select(d => d.Name).ToList(); 

foreach(var x in nodes){ 
    <p>@x</p> 
} 

Однако, путем внесения изменений в код следующее, я не могу получить какие-либо данные о его детей, и я получаю ошибку «System.Xml.Linq.XName» не содержит определения для "потомков:

foreach(var x in nodes){ 
    <p>@x.Descendants().Element("Name")</p> 
} 

Вот очень базовая версия моего XML-файла:

<Item> 
    <Name>Item 1</Name> 
    <Type>Type 1</Type> 
</Item> 

Я хочу, чтобы иметь возможность искать элемент «Элемент» для элемента «Имя» и возвращать значение. Может ли кто-нибудь увидеть, где я ошибаюсь?

ответ

3

Это проблема:

.Select(d => d.Name) 

Вы явно выбирая имена элементов. Если вы хотите сами элементы (которые я думаю, что вы делаете), просто избавиться от этого вызова:

var nodes = doc.Descendants().Elements(ns + "Item").ToList(); 

Вы можете также избавиться от ToList(), если вы потребности запроса будет материализованной жадность.

Смежные вопросы