martes, 3 de agosto de 2010

Trabajar con XML y C#

Hola a todos,

Hace tiempo que no escribo en el blog pero es que últimamente ando muy muy liado con los diferentes proyectos que estamos desarrollando en Syderis. Hoy os pongo un pequeño ejemplo de como leer y escribir XML con la API de .NET framework y C#.

Dado el xml:

<?xml version="1.0" encoding="utf-8" ?>
<sample>
<equipments>
   <equipment type="tipo1">
     <point x="1900" y="1000">
       <title>Titulo</title>
       <image >DSCN2903</image>
       <description>Esta es la descripción del primer punto</description>    
     </point>
     <point x="1000" y="2300">
       <title>Titulo</title>
       <image />DSCN2903
       <description>mirador2</description>    
     </point>
   </equipment>
</equipments>
</sample>



Código del lector:


public void Read(string filename)
       {
           XmlDocument xml = new XmlDocument();
           try
           {
               xml.Load(filename);
               XmlNodeList nodeEquipments = xml.GetElementsByTagName("Equipments");

               //Equipamientos
               XmlNodeList equipmentsNodes = ((XmlElement)nodeEquipments[0]).GetElementsByTagName("equipment");
               string sfilename;
               string stitle;
               string sdescription;
               string sx, sy;
               foreach (XmlElement equipment in equipmentsNodes)
               {
                   string stype = equipment.GetAttribute("type");
                   XmlNodeList pointsNodes = equipment.GetElementsByTagName("point");
                            
                          
                   foreach (XmlElement pointNode in pointsNodes)
                   {
                       sx = pointNode.GetAttribute("x");
                       sy = pointNode.GetAttribute("y");
                       stitle = pointNode.GetElementsByTagName("title")[0].InnerText;
                       sfilename = pointNode.GetElementsByTagName("image")[0].InnerText;
                       sdescription = pointNode.GetElementsByTagName("description")[0].InnerText;                      
                       Console.Writeline("type:"+stype+" coord:"+sx+sy+" filename"+sfilename+" title:"stitle+" description:"+sdescription);

                   }
              
               }
          
           }
           catch (XmlException e)
           {
               Console.WriteLine("XML file load Failure." + e.ToString());
           }
}




Código escritor:


public void Write(string filename)
       {
           XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
           xmlWriter.Formatting = Formatting.Indented;
           xmlWriter.WriteStartDocument();

           xmlWriter.WriteStartElement("Sample");

           //Equipments
           xmlWriter.WriteStartElement("Equipments");

           foreach (string etype in equipments.keys)
           {
               xmlWriter.WriteStartElement("equipment");
               xmlWriter.WriteAttributeString("type", etype);

               foreach (Equipment e in equipments[etype])
               {
                   //<point x="100" y="100">
                   xmlWriter.WriteStartElement("point");
                   xmlWriter.WriteAttributeString("x", e.Point.X.ToString());
                   xmlWriter.WriteAttributeString("y", e.Point.Y.ToString());

                   xmlWriter.WriteStartElement("title");
                   xmlWriter.WriteString(e.Title);
                   xmlWriter.WriteEndElement();

                   //<image />filename
                   xmlWriter.WriteStartElement("image");
                   xmlWriter.WriteString(e.Image);
                   xmlWriter.WriteEndElement();

                   //<description>mirador</description>
                   xmlWriter.WriteStartElement("description");
                   xmlWriter.WriteString(e.Description);
                   xmlWriter.WriteEndElement();

                   xmlWriter.WriteEndElement(); // End point
               }
               xmlWriter.WriteEndElement(); //End equipment
           }

           xmlWriter.WriteEndElement(); //End Equipments

           xmlWriter.WriteEndElement(); //End Sample

           xmlWriter.Flush();
           xmlWriter.Close();

       }

3 comentarios:

KARMA_GREEN dijo...

Ud es el Unico que tiene el codigo correcto graciaaaaaaaaas estaba cansada de buscar

Jorge Cantón Ferrero dijo...

Karma_green, me alegro que te sirviera y que además hayas dejado un comentario positivo.

Un saludo

Danilo Arevalo dijo...

puedes ayudarme porque declaras la variable equipments tengo error ah no se como solucinarlo