Herramientas de usuario

Herramientas del sitio


fw:othersnet:linqxml

¡Esta es una revisión vieja del documento!


Linq to XML

Es la capacidad que tiene .NET de acceder fácil y rápidamente a datos en formato xml.

Básico

Pongamos el siguiente ejemplo de xml:

<?xml version="1.0" encoding="utf-8" ?>
<persons>
  <person status="disabled">
    <name>Alfred</name>
    <surname>GarGon</surname>
    <projects>
      <project>VS</project>
      <project>Geisa</project>
    </projects>
  </person>
  <person>
    <name>Albert</name>
    <surname>Dilbert</surname>
    <projects>
      <project>Temari</project>
    </projects>
  </person>
  <person>
    <name>Joan</name>
    <surname>Nap</surname>
    <projects>
      <project>Temari</project>
      <project>Geisa</project>
      <project>VS</project>
    </projects>
  </person>
  <person status="disabled">
    <name>Pepe</name>
    <surname>Teca</surname>
    <projects>
      <project>VS</project>
    </projects>
  </person>
</persons>

Consultar atributos y elementos

Para abrir, cargar y consultar el archivo se utiliza la clase System.Xml.Linq.XDocument. Luego querremos realizar consultas sobre los objetos person, por ejemplo los que esten con el atributo status enabled:

XDocument xmlDoc = XDocument.Load("XMLFile1.xml");
var persons = from person in xmlDoc.Descendants("person")
              where ((person.Attribute("status") == null) || (person.Attribute("status").Value != "disabled"))
              select new
              {
                  name = person.Element("name").Value,
                  surname = person.Element("surname").Value
              };
 
foreach (var p in persons)
    Console.WriteLine(p.name + " " + p.surname);

Consultar elementos anidados

XDocument xmlDoc = XDocument.Load("XMLFile1.xml");
var persons = from person in xmlDoc.Descendants("person")
              where ((person.Attribute("status") == null) || (person.Attribute("status").Value != "disabled"))
              select new
              {
                  name = person.Element("name").Value,
                  surname = person.Element("surname").Value,
                  projects = (from project in person.Elements("projects")
                              select project.Value).ToList()
              };
 
foreach (var per in persons)
{
    Console.Write(per.name + ": ");
    foreach(var proj in per.projects)
        Console.Write(proj.ToString());
    Console.WriteLine();
}

Notas

* El método estático XDocument.Load recibe un string que corresponde a una URI; quiero decir, también podría aceptar una dirección externa a partir del protocolo http, por ejemplo.

fw/othersnet/linqxml.1246817781.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)