XML с C # LINQ to XML - PullRequest
       30

XML с C # LINQ to XML

0 голосов
/ 01 октября 2009

Ниже приведен пример документа XML.

<People>
   <Person>
       <Name>ABC </Name>
       <SSN>111111</SSN>
       <Address>asdfg</Address>
   </Person>
</People>

Мне нужно получить имена тегов, но не значения между именами тегов. То есть под тегом person я должен получить узлы Name, SSN и Address, а не значения ABC, 111111 и asdfg.

Мне нужно использовать LINQ to XML и запросить его в C # .

Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 01 октября 2009

Возвращает имена в виде списка строк:

var doc = XDocument.Parse(@"<People>
   <Person>
       <Name>ABC </Name>
       <SSN>111111</SSN>
       <Address>asdfg</Address>
   </Person>
</People>"
);

var list = doc.Root.Element("Person").Descendants()
              .Select(node => node.Name.LocalName).ToList();

Если вы используете XElement вместо XDocument, вы можете удалить .Root из приведенного выше кода и получить правильные результаты.

1 голос
/ 01 октября 2009

Создать класс

public class Person
{
     public string Name {get; set;}
     public int SSN {get; set;}
     public string Address {get; set;}
}

И таким образом создайте нового человека;

List<Person> NewPersons = new List<Person>();
XDocument doc = XDocument.Load(xmlFile);     
foreach(XElement xElem in doc.Descendants("Person"))
{
    NewPersons.Add(new Person
            {
                Name = xElem. Element("Name").Value,
                SSN = xElem.Element("SSN").Value,
                Address = xElem.Element("Address").Value,
            });
}
0 голосов
/ 07 октября 2009

Простой LINQ синтаксис для получения имен приведен ниже. Предполагается, что у вас XML загружен в переменную XDocument с именем doc.

var nodeNames = from node in doc.Descendants("Person").First().Descendants()
                select node.Name.LocalName;

Это смотрит только на первого человека. Если у вас есть более одного в XML-документе, список имен, вероятно, не тот, который вы хотели бы (нет причин повторять все имена узлов снова и снова). Таким образом, вы получите список только имен узлов для первого лица, но он предполагает, что у первого будет полный список имен. Если они различаются, вам нужно создать отдельный список из всех узлов.

0 голосов
/ 01 октября 2009

Вы можете получить это таким образом ...

string xml = "<People> <Person> <Name>ABC </Name> <SSN>111111</SSN> <Address>asdfg</Address> </Person> <Person> <Name>ABC </Name> <SSN>111111</SSN> <Address>asdfg</Address> </Person> </People>";

XElement xmlData = XElement.Parse(xml);

foreach(XElement xmlPerson in xmlData.Elements("Person"))
{
    List<string> TagsForThisPerson = new List<string>();
    foreach(XElement xmlTag in xmlPerson.Elements())
    {
        TagsForThisPerson.Add(xmlTag.Name.ToString());
    }
    TagsForThisPerson.Dump();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...