Leggere file XML nodi con attributi

di il
3 risposte

Leggere file XML nodi con attributi

Ciao a tutti, ho questo file XML di prova:

<Biblioteca>
    <book genre='novel' ISBN='88000' misc='sale item'> 
              <title>The Handmaid's Tale</title>
              <price>14.95</price>
    </book>
</Biblioteca>

Ho fatto queste righe di codice per analizzare il file XML, quello che vorrei è far uscire su un MsgBox gli attributi del nodo “book”. Io conosco .getAttribute ma così facendo mi esce solo il valori degli attributi, mentre invece io vorrei che uscisse proprio “genre='novel'”  poi “ISBN='88000'” e “ misc='sale item'” quindi tre substring separate:

   OpenFileDialog1.Multiselect = False
   OpenFileDialog1.ShowDialog()
   Dim fileName As String = Path.GetFileName(OpenFileDialog1.FileName)
   Dim filePath As String = OpenFileDialog1.FileName
   Me.Text = filePath


   Dim docXML As New XmlDocument
   docXML.Load(filePath)

   Dim Reader As XmlNodeReader = New XmlNodeReader(docXML)



   While Reader.Read()

       ' Msgbox("Attributi: "+  Qui il codice per leggere gli attributi
   End While

Grazie!!

3 Risposte

  • Re: Leggere file XML nodi con attributi

    Prova questo:

            Dim docXML As New XmlDocument
            docXML.Load(filePath)
    
            Dim books = docXML.SelectNodes("Biblioteca/book")
    
            For Each book As XmlNode In books
                Dim attributes = book.Attributes
                Dim testo = "Attributi:" & vbCrLf
                For Each attribute As XmlAttribute In attributes
                    testo &= attribute.Name & "='" & attribute.Value & "'" & vbCrLf
                Next
                MsgBox(testo)
            Next
    
  • Re: Leggere file XML nodi con attributi

    19/09/2023 - SirJo ha scritto:


    Prova questo:

            Dim docXML As New XmlDocument
            docXML.Load(filePath)
    
            Dim books = docXML.SelectNodes("Biblioteca/book")
    
            For Each book As XmlNode In books
                Dim attributes = book.Attributes
                Dim testo = "Attributi:" & vbCrLf
                For Each attribute As XmlAttribute In attributes
                    testo &= attribute.Name & "='" & attribute.Value & "'" & vbCrLf
                Next
                MsgBox(testo)
            Next
    

    Grazie, sto provando da qualche giorno a far incastrare il codice che mi hai inviato al mio ma non riesco… mi spiego meglio: il file XML era solo un esempio, e possono essere diversi tipi, ovvero non so il nome root nè i nomi dei nodi, quindi impostare "Dim books = docXML.SelectNodes("Biblioteca/book")" è impossibile…

    ho provato a documentarmi se esiste una qualche funzione che mi restituisce un percorso (tipo quelli dei files) di un determinato punto per poi “buttarlo” nel docXML.SelectNodes ma non ho trovato nulla….mi spiego meglio tipo:

    While Reader.Read()
    
           link = 'percorso_attuale_di_Reader.Read()
           
           Dim books = docXML.SelectNodes(link)
    
            For Each book As XmlNode In books
                Dim attributes = book.Attributes
                Dim testo = "Attributi:" & vbCrLf
                For Each attribute As XmlAttribute In attributes
                    testo &= attribute.Name & "='" & attribute.Value & "'" & vbCrLf
                Next
                MsgBox(testo)
            Next
           
       End While
  • Re: Leggere file XML nodi con attributi

    A me questo funziona:

            Dim docXML As New XmlDocument
            docXML.Load(My.Computer.FileSystem.SpecialDirectories.Desktop & "\file.xml")
    
            ' mi ricavo il nodo principale
            Dim rootNode = docXML.FirstChild
    
            ' mi ricavo il nome dei sottonodi da scansionare
            Dim childNodes = rootNode.FirstChild.Name
    
            ' mi estraggo la lista dei nodi
            Dim books = rootNode.SelectNodes(childNodes)
    
            For Each book As XmlNode In books
                Dim attributes = book.Attributes
                Dim testo = "Attributi:" & vbCrLf
                For Each attribute As XmlAttribute In attributes
                    testo &= attribute.Name & "='" & attribute.Value & "'" & vbCrLf
                Next
                MsgBox(testo)
            Next
    
Devi accedere o registrarti per scrivere nel forum
3 risposte