1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| ''' <summary>
''' ReturnDataXml
''' </summary>
''' <param name="pathXml">chemin jusqu'au fichier que vous souhaité lire ex : c:\toto\content.xml</param>
''' <remarks></remarks>
Private Sub ReturnDataXml(ByVal pathXml As String)
Try
'' DECOMPTE DU NB DE VALEUR PAR LIGNE
' pour mes besoins , il me faut compté le nombre de résultat sur la premiére ligne
Dim doc As New XmlDocument()
Dim mgr As New XmlNamespaceManager(New NameTable())
' ces 3 lignes permettent de définir l'encodage, sans ca les caractéres spéciaux n'apparaissent pas correctement
Using reader As New StreamReader(pathXml, System.Text.Encoding.UTF8)
doc.Load(reader)
End Using
' déclaration des namespace, bon alors pour info un namespace c'est le préfixe de la balise, en l'occurence je déclare office table et text car c'est ceux que dont je vais avoir besoin
mgr.AddNamespace("office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0")
mgr.AddNamespace("table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0")
mgr.AddNamespace("text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0")
' défini l'arborescence de mon xml qui me ménera jusqu'au noeud voulue
Dim row As XmlElement = CType(doc.SelectSingleNode("/office:document-content/office:body/office:spreadsheet/table:table/table:table-row", mgr), XmlElement)
' définition du noeud qui contient l'info que je souhaite récupéré
Dim nombreChamp As Integer = row.GetElementsByTagName("text:p").Count
'' PARCOURS DES VALEURS
Dim XmlDoc As New XmlDocument()
Dim element As XmlNodeList
Dim numLigne As Integer = 1
Dim numCol As Integer = 1
' ces 3 lignes permettent de définir l'encodage, sans ca les caractéres spéciaux n'apparaissent pas correctement
Using reader2 As New StreamReader(pathXml, System.Text.Encoding.UTF8)
XmlDoc.Load(reader2)
End Using
' définition du noeud qui contient l'info que je souhaite récupéré
element = XmlDoc.DocumentElement.GetElementsByTagName("text:p")
' on parcours tous les noeuds text:p
For Each noeud In element
'j'avais besoin de connaitre les "coordonnées" de mes données affichés
If numCol = nombreChamp + 1 Then
numLigne = numLigne + 1
numCol = 1
End If
' affichage de mes données
MsgBox("Numéro Colonne " & numCol & vbCrLf & "Numéro Ligne " & numLigne & vbCrLf & "Valeur " & noeud.innertext())
numCol = numCol + 1
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub |