XML Dateien nutzen / lesen

  • Hallo zusammen,

    wie kann ich Daten aus XMl dateien nutzen hier ein Beispiel.

    Spoiler anzeigen

    Interessant sind dann zum Beispiel Display Namen usw.

    Gruß icerose

    [Edit]
    Also noch zur Info in dieser XML steht die ganze Software welche auf dem Rechner installiert ist das heißt die Einträge gibt es mehrfach!
    [/Edit]

    Einmal editiert, zuletzt von icerose (18. Dezember 2008 um 13:56)

  • Folgendes Skript listet alle Einträge von <DisplayName>

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $array
    _FileReadToArray('Test.xml', $array)
    $aResult = _getAllXML($array, 'DisplayName')
    _ArrayDisplay($aResult)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _getAllXML($array, $Name)
    $Index = _ArrayFindAll($array, '<' & $Name & '>',0,0,0,1)
    If @error Then Return 0
    For $i = 0 To UBound($Index) -1
    $Index[$i] = StringRegExpReplace($array[$Index[$i]], "(<.+?>)", "")
    Next
    Return $Index
    EndFunc ;==>_getAllXML

    [/autoit]

    Edit: Überflüssige Variable entfernt

  • stehe auf dem Schlauch wie bekomme ich denn jetzt ein mehrdimensionales Array mit weiteren Daten??

  • Am einfachsten so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $array
    _FileReadToArray('Test.xml', $array)
    $aDisplayName = _getAllXML($array, 'DisplayName')
    $aDisplayVersion = _getAllXML($array, 'DisplayVersion')
    If UBound($aDisplayName) <> UBound($aDisplayVersion) Then
    MsgBox(16,"Fehler","Nicht gleich viele Attribute pro Programm gefunden!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $aInfos[UBound($aDisplayName)][2]

    [/autoit] [autoit][/autoit] [autoit]

    For $i=0 To UBound($aInfos,1) -1
    $aInfos[$i][0] = $aDisplayName[$i]
    $aInfos[$i][1] = $aDisplayVersion[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aInfos)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _getAllXML($array, $Name)
    $Index = _ArrayFindAll($array, '<' & $Name & '>',0,0,0,1)
    If @error Then Return 0
    For $i = 0 To UBound($Index) -1
    $Index[$i] = StringRegExpReplace($array[$Index[$i]], "(<.+?>)", "")
    Next
    Return $Index
    EndFunc ;==>_getAllXML

    [/autoit]
  • gut dann muss ich mir jetzt noch wa seinfallen lassen damit das auch angezeigt wird. Weil wie zu erwarten war sind es nicht gleich viele Attribute.