En este post aprenderemos a leer archivos xml con C# usando el espacio de nombres System.Xml de la plataforma .NET
Que es un archivo XML
Es un lenguage de marcas utilizado para organizar los datos de forma estructurada y comprensible, tanto para la persona como para los programas informáticos, que permite entre otras muchas cosas, que diferentes sistemas se comuniquen mandandose la información en formato XML.
Un archivo XML se compone de etiquetas que a su vez pueden contener mas etiquetas o valores:
<?xml version="1.0" encoding="UTF-8" ?> <persona> <nombre>Pablo</nombre> <edad>34</edad> </persona>
Además, las etiquetas también pueden tener atributos, que otorgan mayor información a la etiqueta que los contiene, en el ejemplo sería «edad»:
<?xml version="1.0" encoding="UTF-8" ?> <personas> <nombre edad="34">Pablo</nombre> <nombre edad="35">Sara</nombre> <nombre edad="45">Fulanito</nombre> </personas>
Leer XML con C#
Para poder acceder a los datos xml mediante .NET empezamos agregando la referencia a System.Xml e importandola después mediante código:
using System.Xml
Usando de ejemplo el xml anterior, para leer sus atributos y etiquetas podriamos usar:
XmlDocument xDoc = new XmlDocument(); xDoc.Load("c:/personas.xml"); XmlNodeList xPersonas = xDoc.GetElementsByTagName("personas"); XmlNodeList xLista = ((XmlElement)xPersonas[0]).GetElementsByTagName("nombre"); foreach (XmlElement nodo in xLista) { string xEdad = nodo.GetAttribute("edad"); string xNombre = nodo.InnerText; }
Con GetElementsByTagName vamos accediendo a las etiquetas y creando variables que contengan la colección en cuestion, para finalmente acceder a sus atributos con GetAttribute o al valor de la etiqueta con InnerText.
En el código anterior, por supuesto sería conveniente usar control de excepciones Try/Catch y comprobar previamente que el fichero xml a leer existe:
using System.IO; if (File.Exists("c:/personas.xml")) { ... }
37588 visitas.
Muy grande tu aporte, me sirvió mucho
Muy buen ejemplo pero una pregunta si tenemos un archivo de este estilo… por ejemplo
¿còmo se hace para leerlo linea a linea, y que el reconozca el orden de los nodos hijos para irlos guardando en variables o una matriz?, por favor no pido que me haga el trabajo pero si por ejemplo un codigo de ejemplo de un recorrido de este estiilo, reconociendo que los nodos se llaman iguales y solo puede o no que cambie sus atributos y por ello lo mejos es un método que recorra linea a linea ya que puede que no haya ningún campo clave que su valor sea único.
Hola
Como puedo hacer para que en el nodo.InerText no venga concatenado? si no uno a la vez.
Por fin, una archivo xml simple y muy bien explicado.
muchas gracias por el aporte sencillo y conciso
Excelente aporte, muy breve y claro.
y si quiero modificar..?