Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Estrazione da un xml di righe multiple.

  1. #1
    SCvanni non è in linea Scolaretto
    Buon giorno e buona Pasqua a tutto il forum

    Mi sto cimentando nella estrazione da un file xml di una sezione con righe multiple, mi spiego meglio con un esempio, il dato del nodo che viene reso :

    Attuale:
    20.40 12.10 20.35 (i dati sono separati da uno spazio)

    Desiderato:
    20.40
    12.10
    20.35
    il codice che utilizzo per l'estrazione del nodo è questo:

    'seleziono il nodo da leggere
    Set Nodo3 = obj.DocumentElement.SelectNodes("//DatiGenerali/Riepilogo//QuantPercent")
    'leggo tutti i dati del nodo
    For Each Nome In Nodo3
    'estraggo il valore del nodo
    Testo3 = Testo3 & " " & Nome.Text
    Debug.Print Testo3
    Next
    
    Credo che la soluzione sia o un ciclo for annidato o una if ma...brancolo nel buio

    Suggerimenti?
    ℹ️ Leggi di più su SCvanni ...

  2. #2
    Se nella stringa hai proprio la sequenza

    "20.40 12.10 20.35"

    separata da spazi, utilizza la Split
    https://support.microsoft.com/it-it/...f-10078c7878f5
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    SCvanni non è in linea Scolaretto
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Se nella stringa hai proprio la sequenza

    "20.40 12.10 20.35"

    separata da spazi, utilizza la Split
    https://support.microsoft.com/it-it/...f-10078c7878f5
    Grazie Antonio per la risposta celere, ci provo e faccio sapere.
    ℹ️ Leggi di più su SCvanni ...

  4. #4
    SCvanni non è in linea Scolaretto
    Provato se scrivo cosi:

    For Each Nome In Nodo4
       If Len(Split(Nome)) > 0 Then
           Testo4 = Testo4 & " " & Split(Nome.Text)
          Debug.Print Testo4
       End If
    Next
    
    Ottengo:
    20.40
    12.10
    20.35
    ma anche:
    "20.40 12.10 20.35"
    ho provato anche
    For Each Nome In Nodo4
       If Len(Split(Nome)) > 0 Then
           Testo4 = Testo4 & " " & Split(Nome.Text)
          Debug.Print Testo4
       End If
     If Split(Nome) = "" Then
          Next for
       End If
    
    Next
    

    ma il next for pare non lo digerisca o difetta in sintassi
    ℹ️ Leggi di più su SCvanni ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Se fai lo split ottieni un'array... devi ciclarlo, oppure, sapendo che sono solo 3 items, leggere i 3 items indirizzando la variabile Variant valorizzata con lo split... e tu non fai nulla di tutto questo.
    ℹ️ Leggi di più su @Alex ...

  6. #6
    SCvanni non è in linea Scolaretto
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Se fai lo split ottieni un'array... devi ciclarlo, oppure, sapendo che sono solo 3 items, leggere i 3 items indirizzando la variabile Variant valorizzata con lo split... e tu non fai nulla di tutto questo.
    Grazie Alex già avevo letto qualcosa provo e faccio sapere .
    ℹ️ Leggi di più su SCvanni ...

  7. #7
    Se la stringa completa è nella variabile Nome, comincia a scrivere

    Valori=Split(Nome)

    e poi semplicemente elenca gli elementi dell'array Valori
    ℹ️ Leggi di più su AntonioG ...

  8. #8
    SCvanni non è in linea Scolaretto
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Se fai lo split ottieni un'array... devi ciclarlo, oppure, sapendo che sono solo 3 items, leggere i 3 items indirizzando la variabile Variant valorizzata con lo split... e tu non fai nulla di tutto questo.
    Salve Alex
    io il testo l'ho ciclato in questo modo (ho eseguito la prova su un nodo):
    'seleziono il nodo da leggere
    Set Nodo3 = obj.DocumentElement.SelectNodes("//DatiGenerali/Riepilogo//QuantPercent")
    'leggo tutti i dati del nodo
    For Each Nome In Nodo3
    Testo3 = Testo3 & " " & Nome.Text
    Dim  I, Dato, Riga
     Dato = Split(Testo3)
      Riga = 1
       For I = LBound(Dato) To UBound(Dato)
          If Dato(I) <> "" Then
            Testo3 = Dato(I)
           Debug.Print Testo3
          Riga = Riga + 1
        End If
    Next
    
    Next
    
    mah quello che ottenevo era questo:
    in un primo momento Nulla (ndr: lavoravo su un nodo vuoto)
    Cambiato nodo (ndr: prima di passare per lo scorsoio)
    ho ottenuto questo:
    20.40
    20.40
    12.10
    20.35
    Quindi ho seguito i consigli del mio medico di fiducia (devi andare presto a letto!) erano le 5 del mattino.

    Stamane conclusioni :

    1_ Lo Split non era necessario
    2_l'errore stava nella scrittura del nodo, esattamente quì;

    Non:
    Testo3 = Testo3 & " " & Nome.Text
    
    ma:
    Testo3 = Nome.Text
    
    Sempre che tecnicamente sia corretto!

    Saluti e grazie a tutti.
    ℹ️ Leggi di più su SCvanni ...

  9. #9
    Quote Originariamente inviato da SCvanni Visualizza il messaggio
    1_ Lo Split non era necessario
    2_l'errore stava nella scrittura del nodo, esattamente quì;
    Posso dire che non ho capito (quasi) nulla in tutto questo?
    Lo Split non era necessario? Ma è il sistema per definizione per suddividere una stringa che contiene una lista in n elementi!
    Parli di nodo da leggere, poi però dici che c'è un errore "nella scrittura del nodo".
    Boh! Non che a me serva capire come funziona, perché mi sono fatto il cosiddetto con alcuni xml che basta e avanza per i miei gusti, ma non so quanto questo thread sia stato utile a te e possa esserlo ad altri utenti.

  10. #10
    SCvanni non è in linea Scolaretto
    Quote Originariamente inviato da Phil_cattivocarattere Visualizza il messaggio
    Posso dire che non ho capito (quasi) nulla in tutto questo?
    Lo Split non era necessario? Ma è il sistema per definizione per suddividere una stringa che contiene una lista in n elementi!
    Parli di nodo da leggere, poi però dici che c'è un errore "nella scrittura del nodo".
    Boh! Non che a me serva capire come funziona, perché mi sono fatto il cosiddetto con alcuni xml che basta e avanza per i miei gusti, ma non so quanto questo thread sia stato utile a te e possa esserlo ad altri utenti.
    Phil grazie per l'intervento
    giusto per darti dei ragguagli:

    In un primo momento da debug (una riga era nascosta) sembrava che la riga resa dall'XML così estratta:
    Set Nodo3 = obj.DocumentElement.SelectNodes("//DatiGenerali/Riepilogo//QuantPercent")
    'leggo tutti i dati del nodo
    For Each Nome In Nodo3
    Testo3 = Testo3 & " " & Nome.Text
    Debug.Print Testo3
    next
    
    fosse questa:
    "20.40 12.10 20.35"
    per qui mi è stato suggerito, giustamente, uno split ma fatto questo come dicevo nel post precedente
    il risultato diventava questo:
    20.40
    20.40
    12.10
    20.35
    quindi il primo dato veniva ripetuto 2 volte

    di fatto senza la necessità di splittare (bastava allargare la finestra immediata)
    mi sarei accorto subito che l'errore era questo:

    Non scrivere cosi:
    Testo3 = Testo3 & " " & Nome.Text
     
    ma:
    Testo3 = Nome.Text
    
    e...alzare la finestra immediata

    Tanto, dovevo anche a te, problema risolto.
    Saluti
    ℹ️ Leggi di più su SCvanni ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Condizioni multiple
    Da pgft nel forum Microsoft Excel
    Risposte: 15
    Ultimo Post: 13-03-2015, 18:10
  2. Istanze multiple
    Da bahnzy nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 26-01-2011, 22:32
  3. Stampanti multiple
    Da Eurofolle nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 28-11-2007, 14:25
  4. Condizioni multiple
    Da coccobil nel forum PHP
    Risposte: 4
    Ultimo Post: 22-05-2006, 21:14
  5. combo multiple
    Da Ponc nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 30-05-2005, 21:40