Parsing di stringa xml

di ridaria il
17 risposte
Ciao ragazzi,

da un web service ricevo la seguente stringa:

"<HSREQ xmlns:x="urn:gif:pdc:hsreq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc" xsi:schemaLocation="urn:gif:pdc:hsreq ./xsd/hsreq.xsd">
<ESITO>OK</ESITO>
<MESSAGGIO>
<idupload>25913</idupload>
<idfattura>24629</idfattura>
</MESSAGGIO>
</HSREQ>"

Ho bisogno di usare uno strumento di lettura di questo xml che mi permetta di accedere in modo diretto
ai valori dei singoli elementi.

La classe piu diffusa di vb, net legge i dati da un file .xml, ma io non ho un file ho una stringa!!!

MI date una mano?

Grazie

17 Risposte

  • Quale sarebbe la difficoltà? usa ricerche a sottostringa
  • Substring?
    E che cerco

    <Esito>cosa qui dentro?<\esito>

    Ne sei certo di ciò che dici?
  • Sono abbastanza certo.
    fatti una funzione banale del tipo prendi_tag_xml dove gli passi il tag da cercare
    trovi la prima posizione in cui si trova, diciamo inizio
    poi cerchi </+tag e quella è la fine
    cicli da inizio a fine e prendi tutta la stringa in mezzo, e la ritorni dalla funzione.
  • E così impiego l ira di Zeus del tempo questa la sapevo anche io.

    Ho chiesto il parsing di xml come funzione nativa.
    Grazie molte comunque caro m2+
  • Bhe io ci ho impiegato 90 secondi, cronometrato, con delphi.
  • Inoltre la tua non è una stringa, prova a scrivere
    Dim s as string = e incollacela
    altrimenti potevi provare con ReadXml
  • Cosa non è una stringa??


    e dove dovrei incollarla???
  • Se per es la tua stringa avesse questa struttura
    "<MESSAGGIO><ESITO>OK</ESITO><idupload>25913</idupload><idfattura>24629</idfattura></MESSAGGIO>"
    potresti leggerla così
    Dim s As String
            s = "<MESSAGGIO><ESITO>OK</ESITO><idupload>25913</idupload><idfattura>24629</idfattura></MESSAGGIO>"
            TextBox2.Text = s
            Dim SR As New StringReader(s)
            Dim ds As New DataSet()
            ds.ReadXml(SR)
            DataGridView1.DataSource = ds.Tables(0)
  • Versione pascal
    function g_xml_prenditag(i_stringa:string;i_nometag:string):string;
    var
       inizio:integer;
       fine:integer;
       i:integer;
       s:string;
    begin
       Result:='';
       inizio:=Pos('<'+lowercase(i_nometag)+'>',LowerCase(i_stringa));
       if inizio>0 then
       begin
           fine:=Pos('</'+lowercase(i_nometag)+'>',LowerCase(i_stringa));
           if fine>0 then
           begin
               s:='';
               for i:=inizio+length('<'+lowercase(i_nometag)+'>') to fine-1 do
                   s:=s+i_stringa[i];
               result:=s;
           end;
       end;
    end;
  • patel ha scritto:


    Se per es la tua stringa avesse questa struttura
    "<MESSAGGIO><ESITO>OK</ESITO><idupload>25913</idupload><idfattura>24629</idfattura></MESSAGGIO>"
    potresti leggerla così
    Dim s As String
            s = "<MESSAGGIO><ESITO>OK</ESITO><idupload>25913</idupload><idfattura>24629</idfattura></MESSAGGIO>"
            TextBox2.Text = s
            Dim SR As New StringReader(s)
            Dim ds As New DataSet()
            ds.ReadXml(SR)
            DataGridView1.DataSource = ds.Tables(0)

    e cosa c'entra la griglia????

    devo leggerla a run time e passare i valori ad altre funzioni
  • È solo per farti capire quanto sia semplice leggere una stringa xml ben strutturata, cosa che la tua non è, quindi sei costretto ad seguire il consiglio di +m2+
  • Direi che la cosa è molto banale, eccoti qui il codice di esempio:
    Imports System.Text.RegularExpressions
    
    Dim txt = "<HSREQ xmlns:x=""urn:gif:pdc:hsreq"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""urn:gif:pdc:hsreq ./xsd/hsreq.xsd""><ESITO>OK</ESITO><MESSAGGIO><idupload>25913</idupload><idfattura>24629</idfattura></MESSAGGIO></HSREQ>"
    
    Dim esito = Regex.Match(txt, "<ESITO>(.*?)</ESITO>").Groups(1).Value
    Dim idupload = Regex.Match(txt, "<idupload>(.*?)</idupload>").Groups(1).Value
    Dim idfattura = Regex.Match(txt, "<idfattura>(.*?)</idfattura>").Groups(1).Value
    
    Sergio
  • Hai ragione SirJo, ora che ho visto come si fa sono d'accordo con te, è veramente banale.
  • SirJo, hai barato, la stringa proposta da ridaria non aveva le doppie virgolette

    ridaria ha scritto:


    "<HSREQ xmlns:x="urn:gif:pdc:hsreq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc" xsi:schemaLocation="urn:gif:pdc:hsreq ./xsd/hsreq.xsd">
    <ESITO>OK</ESITO>
    <MESSAGGIO>
    <idupload>25913</idupload>
    <idfattura>24629</idfattura>
    </MESSAGGIO>
    </HSREQ>"
Devi accedere o registrarti per scrivere nel forum
17 risposte