C # XDocument, помогите захватить элементы анонимно - PullRequest
1 голос
/ 16 марта 2011

У меня проблемы с захватом элементов анонимно. Я не хочу называть элементы по имени. Второе выражение foreach просто захватывает весь раздел, как будто это один элемент. Как мне просмотреть все значения без вызова каждого по имени? Я открыт для выполнения операторов linq, но из каждого прочитанного примера я не понимаю, как их использовать, не вызывая каждый элемент по имени. Спасибо за любую помощь!

public class box
{
    public List<Person> People { get; set; } 
}

public class Person
{
    public Dictionary<string, string> data { get; set; } 
}

/*

<outer>
    <xml>
        <person>
          <data>
            <house>Big</house>
            <cell>911</cell>
            <address>NA</address>
          </data>
        </person>
        <person>
          <data>
            <house>Big</house>
            <cell>911</cell>
            <address>NA</address>
          </data>
        </person>
        <person>
          <data>
            <house>Big</house>
            <cell>911</cell>
            <address>NA</address>
          </data>
        </person>
        <person>
          <data>
            <house>Big</house>
            <cell>911</cell>
            <address>NA</address>
          </data>
        </person>
    </xml>
</outer>

*/


this.box.People = new List<Person>();

foreach (var ele in xml.Descendants("person"))
{
    Person somebody = new Person 
    {
        data = new Dictionary<string, string>(),
    };

    foreach (var temp in ele.Descendants("data")) 
    {
        somebody.data.Add(temp.Name.ToString(), temp.Value.ToString()); 
    }

    this.box.People.Add(somebody); 
}

Ответы [ 4 ]

1 голос
/ 16 марта 2011

Этот код просматривает элементы и атрибуты в документе XML.Вам не нужно указывать имя для метода Elements ().

XDocument xmlDoc = new XDocument();
foreach (XElement element in xmlDoc.Elements()) {
    // .. Do something with the element
    foreach (XAttribute attribute in element.Attributes()) {
        // .. Do something with the attribute
    }
}
1 голос
/ 16 марта 2011

Это работает ( проверено ) - просто отсутствовала часть Elements():

foreach (var temp in ele.Descendants("data").Elements()) 
{
    somebody.data.Add(temp.Name.ToString(), temp.Value); 
}
0 голосов
/ 16 марта 2011

Если я правильно понимаю, вы можете посмотреть:

http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx

0 голосов
/ 16 марта 2011
foreach (var temp in ele.Descendants("data")) 
{
    foreach( var valueElem in temp.Elements() )
    {
        somebody.data.Add(valueElem.Name.LocalName, valueElem.Value); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...