none
Cargar XML en Silverlight RRS feed

  • Pregunta

  • Hola mi nombre es Elvis, y les hago esta pregunta ya que e tenido problemas al tratar de pasar un codigo que utilizaba en XNA para cargar los datos del juego desde un xml con XmlDocument, ya que en Silverlight no existe esta clase, el codigo para leer el xml era el siguiente:

    //primero creaba una lista de objetos del juego

    List<Objeto> objetos = new List<Objetos>()

    //creaba objeto de tipo XmlDocument para obtener los datos del archivo xml

    XmlDocument doc = new XmlDocument();

    doc.Load("rutaXml");

    //cargaba los atributos de los nodos secundarios 

    foreach (XmlNode nodo in doc.FirstChild.ChildNodes)

    {

    //Asigno los atributos del nodo a un objeto

    Objeto objeto = new Objeto();

    objeto.atributo1 = nodo.Attributes[0].InnerText;

     

    objeto.atributo2 = byte.Parse(nodo.Attributes[1].InnerText);

    //y agrego el objeto a la lista

    objetos.add(objeto);

     

    }

     

    Asi de simple es el codigo con XmlDocument, pero con Silverlight no encuentro la manera, lo he intentado de varias formas pero sin exito, alguien sabe como solucionar esto?

     

    lunes, 28 de febrero de 2011 20:15

Todas las respuestas

  • Hola Elvisbrevi.

    El objeto XmlDocument esta desde el framework 1.1, a partir del framework 3.5 existe unas nuevas clases para trabajar con XML mediante LINQ que facilitan la tarea bastante.

    De echo tu ejemplo se puede simplificar en lo siguiente:

     

          // crear objeto de tipo XDocumnent de Linq para obtener los datos del archivo xml
          System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load("rutaXml.xml");
    
          // con nombres de atributos
          List<Objeto> objetos = doc.Descendants("nombreElementoXmlAObtener").Select((element) => new Objeto()
            {
              atributo1 = element.Attribute("atributeName1").ToString(),
              atributo2 = element.Attribute("atributeName2").ToString()
            }).ToList();
    
          // por indices de atributos
          objetos = doc.Descendants("nombreElementoXmlAObtener").Select((element) => new Objeto()
          {
            atributo1 = element.Attributes().ElementAt(0).ToString(),
            atributo2 = element.Attributes().ElementAt(1).ToString()
          }).ToList();
    

     

    Se tiene que agregar el ensamblado System.Xml.Linq para el ejemplo.

    Como se puede observar mediante Linq se puede tener acceso a todo el arboll XML sin tener que recorrerlo, ya que de ello se encarga LINQ y de forma mas optima.

    Echale un vistazo y si tienes problemas comentalo.

     

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Propuesto como respuesta CorsarioVasco martes, 1 de marzo de 2011 6:18
    lunes, 28 de febrero de 2011 21:19