none
xml schema RRS feed

  • Pregunta

  • Hola, estoy haciendo un proyecto sobre servicios web, y el protocolo que utilizo es soap, y los mensajes que recibe y envia mi servicio web son xml, pero tengo un problema necesito darle estructura a los documentos xml que envio y recibo con xml schema y no se muy bien como hacerlo y busque por la red, pero no encontre nada que me sirviera, si por favor alguien me puede ayudar :), muchas gracias.Utilizo visual estudio 2008 y el lenguaje de progaramación es c#.
    miércoles, 8 de abril de 2009 9:18

Todas las respuestas

  • hola,

    si quieres aprender a validad un xml lo primero que debes saber es XSD:

    Designing XML Schema Libraries

    Working with XML Schemas

    XmlDocument. Validate

    Using an XSD to Validate an XmlDocument

    info sobre este hay mucha, pero es complejo de aprender, por ahi te recomendaria que consigas alguna tool que te ayude, yo utilice Stylus Studio , hay otra muy buena XML Spy, pero lo malo de esta ultima es que es muy pesado.

    XML Schema Definition Tool (Xsd.exe)

    Esto otra tool tambien podra ayudarte a generar los XSD.

    Si haces uso del ultimo framework de .net te recomiendo leas algo sobre: LINQ to XML
    Te puedo asegurar que es un camino de ida, cuando aprendes Linq no querras volver atras.

    Con respecto a tu servicio web, el envio del xml lo haces de forma normal, el metodo puede devolver un string que contenga el xml, se que con el XmlDocument hay problemas ya que no serializa, aunque creo que si utilizas el XmlNode funciona.

    XML and SOAP Serialization


    Bueno espero te sea de utilidad
    Saludo

    Leandro Tuttini
    miércoles, 8 de abril de 2009 13:10
  • Muchismas gracias, me pondre ahora a mirar la informaciónque me has proporcionado :).
    Un saludo
    miércoles, 8 de abril de 2009 13:25
  • Hola lo he mirado y sigo sin entenderlo, le explico concretamnete lo que tengo que hacer por si me pude ayudar o darme una orientación que creo que es por lo que  no entiendo las cosas,
     yo obtengo de la base de datos un dataset y este dataset tengo que ponerlo en un xmldatadocument y tengo que utilizar para ello xml schema porque el xmldatadocument las etiquetas tienen que poner etiquetas relaionadas con el contenido del dataset, me explico mejor:
    LLamo a un metodo del servicio web que tiene que devolver todos los operadores que dispone el servicio web en su base de datos, el servicio web tiene que devolver esto:

    <ListaOperdaores>

       <Operador>ERR</Operador>
       <Operador>AIE</Operador>
       <Operador>EXX</Operador>

     </ListaOperdaores>

    Y entonces no se como hacerlo, lo que hago es lo siguiente:


    [WebMethod]
        public XmlDataDocument TosdosOperadores()
        {
            AccesoBD v_accesoBD = new AccesoBD();
            DataSet oper = new DataSet();
            DataSet v_ds = new DataSet();
            v_ds.Clear();
            v_ds.Tables.Clear();

            v_ds = v_accesoBD.BDCargarOperadores();
            XmlDataDocuemnt nuevo= new XmlDataDocument( v_ds);//Aqui creo un xmldatadocument con el contenido del dataset
            string xml= "";
           xml = nuevo.InnerText;
           XmlReader reader = XmlReader.Create("xml");

           XmlDocument document = new XmlDocument();

           document.Load(reader);
           StreamReader stream = new StreamReader("SuperProProductList.xsd");
           XmlSchema schema = XmlSchema.Read(stream, validator);

           document.Schemas.Add(schema);

           ValidationEventHandler eventHandler = new ValidationEventHandler(validator);

          

     

            return document;


    }


    espero haberme explicado bien, y otra duda que me surgio por si me la pueden resolver, como ven el Servicio web devuelve un xmldatadocument y eso no me da error , pero por el contrario el enviar XmlDataDocuement al servicio web en otro método me da un excepcion de serializacion, porque es ? ya probe a poner en vez de un xmlDataDocument un xmlnode pero da la excepcion igual.
    Muchas gracias.


    miércoles, 8 de abril de 2009 19:39
  • hola,

    Si ese error es comun ya que el tipo de datos que devuelve el web service seguro no se serializa.

    prueba cambiarlo a string:

    public string TosdosOperadores()

    y luego retorna de esta forma:

    return document.OuterXml;

    Aqui ejemplo del uso del outer y el inner xml:
    XmlNode.OuterXml


    Del otro lado por supuesto obtendras el string con el xml, y deberias cargarlo en tu XmlDocument nuevamente y validarlo si quieres.



    Puedes probar como te decia pasar un xmlnode:

    public XmlNodeTosdosOperadores()

    pero solo para probar ya que no estoy seguro que funcione.


    Saludos

    Leandro Tuttini
    miércoles, 8 de abril de 2009 21:04