====== 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:
Alfred
GarGon
VS
Geisa
Albert
Dilbert
Temari
Joan
Nap
Temari
Geisa
VS
Pepe
Teca
VS
===== 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();
}
===== Crear elementos =====
==== Crear fichero .xml ====
Ejemplo:
List lAppsConf = getListXElements(user.AppsConf);
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "true"),
new XElement("user",
new XElement("name", user.name),
new XElement("password", user.pass),
new XElement("default_app", user.defAppId),
new XElement("admin", user.admin.ToString()),
new XElement("apps_conf", lAppsConf)));
doc.Save(path);
Para agregar atributos podemos hacer lo siguiente:
XElement element = new XElement("parada",
new XAttribute("parada", numParada.ToString()),
new XAttribute("descripcio", ""),
getBuses());
...O...
element.SetAttributeValue("parada", "33");
===== 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.
* Para recoger el fichero xml podremos llamar al método ''Save'', pero si lo queremos en un string haremos:
System.Text.StringBuilder output = new System.Text.StringBuilder();
output.Append(doc.Declaration + Environment.NewLine);
output.Append(doc.ToString());
string str = output.ToString();