Visualizzazione dei risultati da 1 a 10 su 28

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Quote Originariamente inviata da sspintux Visualizza il messaggio
    Ciao e buon anno anche a te.

    prova a farti generare le classi con l'utility XSD.EXE
    eseguita dal prompt dei comandi di visual studio.

    HTH
    Ciao...E grazie per avermi risposto
    Ho seguito il tuo consiglio e sono andato a spulciarmi come funziona xsd...ma, utilizzando le classi generate dal tool, il risultato non cambia "Errore nel documento Xml (1, 2)"

    Ho notato che il tool XSD, mi crea due file XSD dal file XML Error.xml: Error.xsd e Error_app1.xsd.
    Il tool XSD, mi ritorna un errore se provo a traformare in classe il primo file, mentre l'esito è positivo se traformo il secondo file.
    Comunque...utilizzando la classe generata dal secondo file, l'errore è lo stesso.

    Ho provato ad utilizzare anche il codice suggerito da Microsoft per gli stream XML SOAP, ma l'errore è lo stesso.
    codice:
    Dim myTypeMapping As XmlTypeMapping = (New SoapReflectionImporter().ImportTypeMapping(GetType(clsError)))
    Dim mySerializer As XmlSerializer = New XmlSerializer(myTypeMapping)
    Dim a As clsError = CType(mySerializer.Deserialize(st), clsError)
    Temo che mi toccherà far passare tutti i singoli tag a mano

  2. #2
    Quote Originariamente inviata da mmjc23 Visualizza il messaggio
    Ciao...E grazie per avermi risposto
    Ho seguito il tuo consiglio e sono andato a spulciarmi come funziona xsd...ma, utilizzando le classi generate dal tool, il risultato non cambia "Errore nel documento Xml (1, 2)"
    ...
    Temo che mi toccherà far passare tutti i singoli tag a mano
    estrai e deserializza solo il payload , ovvero il contenuto del soap body;
    ...una cosa del genere supponendo che il messaggio soap sia in un file
    codice:
       XmlDocument doc = new XmlDocument();
       doc.Load(@"c:\temp\soap.xml");
       XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
       nsmgr.AddNamespace("soap-env","http://schemas.xmlsoap.org/soap/envelope/");
       XmlElement ex = (XmlElement) doc.DocumentElement.SelectSingleNode("soap-env:Body", nsmgr);
    
      //e poi  vai di xmlSerializie(typeof(....))

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Quote Originariamente inviata da sspintux Visualizza il messaggio
    estrai e deserializza solo il payload , ovvero il contenuto del soap body;
    ...una cosa del genere supponendo che il messaggio soap sia in un file
    codice:
       XmlDocument doc = new XmlDocument();
       doc.Load(@"c:\temp\soap.xml");
       XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
       nsmgr.AddNamespace("soap-env","http://schemas.xmlsoap.org/soap/envelope/");
       XmlElement ex = (XmlElement) doc.DocumentElement.SelectSingleNode("soap-env:Body", nsmgr);
    
      //e poi  vai di xmlSerializie(typeof(....))
    Ciao e grazie di nuovo per la risposta...

    Ho provato a fare come mi hai detto ma il risultato è sempre..."Errore nel documento Xml (1, 2)"

    Ecco il codice (dove dettaglioAutoveicoloComproprietariTrasferimentiRes Response è la classe restiutita dal tool xsd):
    codice:
    Dim a As New dettaglioAutoveicoloComproprietariTrasferimentiResResponse
    Dim doc As New System.Xml.XmlDocument()
    doc.Load("c:\Prova\Error.xml")
    Dim nsmgr As New System.Xml.XmlNamespaceManager(doc.NameTable)
    nsmgr.AddNamespace("soap-env", "http://schemas.xmlsoap.org/soap/envelope/")
    Dim ex As System.Xml.XmlElement = doc.DocumentElement.SelectSingleNode("soap-env:Body", nsmgr)
    Arrivato qui: ho provato ad utilizzare 3 "tipologie" di serializzazione:

    PRIMA: (restituisce "Errore nel documento Xml (1, 2)")

    codice:
    'Serialiazzatore
    Dim ser As New XmlSerializer(GetType(dettaglioAutoveicoloComproprietariTrasferimentiResResponse))
    a = CType(ser.Deserialize(New StringReader(ex.OuterXml)), dettaglioAutoveicoloComproprietariTrasferimentiResResponse)
    SECONDA: (restituisce "Errore nel documento Xml (1, 2)")
    [CODE]
    Dim myTypeMapping As XmlTypeMapping = (New SoapReflectionImporter().ImportTypeMapping(GetType (dettaglioAutoveicoloComproprietariTrasferimentiRe sResponse)))
    Dim mySerializer As XmlSerializer = New XmlSerializer(myTypeMapping)
    a = CType(mySerializer.Deserialize(New StringReader(ex.OuterXml)), dettaglioAutoveicoloComproprietariTrasferimentiRes Response)
    [CODE]

    TERZA: (L'oggetto "SoapFormatter", non accetta StringReader come parametro del metodo "Deserialize" e non so cosa passargli)
    codice:
    Dim formatter As New SoapFormatter
    a = DirectCast(formatter.Deserialize(xxxxxxx, dettaglioAutoveicoloComproprietariTrasferimentiResResponse)
    Grazie

  4. #4
    Quote Originariamente inviata da mmjc23 Visualizza il messaggio
    [/CODE]

    codice:
    'Serialiazzatore
    Dim ser As New XmlSerializer(GetType(dettaglioAutoveicoloComproprietariTrasferimentiResResponse))
    a = CType(ser.Deserialize(New StringReader(ex.OuterXml)), dettaglioAutoveicoloComproprietariTrasferimentiResResponse)
    ex.InnerXml

    P.S.
    ma hai cambiato l'xml da cui generi xsd e file di classe ?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Quote Originariamente inviata da sspintux Visualizza il messaggio
    ex.InnerXml

    P.S.
    ma hai cambiato l'xml da cui generi xsd e file di classe ?
    Provato anche con "InnerXml"....stesso identico errore.
    No...l'XML è sempre quello...nel primo post avevo modificato leggermente i nomi per semplificare la comprensione.

    L'XML è questo:
    codice HTML:
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/><SOAP-ENV:Body>
    <inf:dettaglioAutoveicoloComproprietariTrasferimentiResResponse xmlns:inf="http://www.dtt.it/xsd/INFOWS">
      <inf:errore>
        <inf:codiceErrore>01</inf:codiceErrore>
        <inf:descrizioneErrore>Record assente su targatura nazionale</inf:descrizioneErrore>
      </inf:errore>
    </inf:dettaglioAutoveicoloComproprietariTrasferimentiResResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ...e la classe "dettaglioAutoveicoloComproprietariTrasferimentiRe sResponse" è stata creata mediante il tool xsd. Come dicevo prima però, il tool XSD, mi ha creato due file ".xsd" e solo con il secondo mi ha creato la classe...il primo dava errore.

    @LeleFT: Lo stream XML, mi viene ritornato da un Web Service di terze parti e che quindi non posso modificare...non credo che sbaglino loro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.