XML Datei auslesen

  • Hallo,

    habe ein kleines Problem beim auslesen einer XML ähnlich dieser:

    <devices>
    <host ip="192.192.0.1" name="PC01" />
    <host ip="192.192.0.2" name="PC02" video="1" />
    <host ip="192.192.0.3" name="PC03" />
    <host ip="192.192.0.4" name="PC04" video="0" />
    <host ip="192.192.0.5" name="PC05" video="1" />
    </devices>

    Ich möchte gerne über DOM auslesen, welcher "Host" ein Attribut "Video=1" hat und mir dann die Attribute "ip" und "name" dazu auslesen.

    Wenn ich den Node "host" auslese kriege ich (natürlich) nur den letzten (PC05) angezeigt.

    Kann auch leider nicht nach dem Node "host" mit "Video=1" suchen, da es mehrere geben kann...

    Habe auch schon mit dem XML DOM wrapper (COM), COM XML wrapper for DOM aus dem englischen Forum gespielt aber auch nix... ;(

    Hat jemand eine Idee?
    Danke!
    Gruß

    • Offizieller Beitrag

    Hi,

    poste mal die Datei und dann was du davon haben willst.

    Bitte so beschreiben, dass selbst ich es verstehe. DANKE!

    [autoit]


    #include<string.au3>
    #include<Array.au3>
    #include <file.au3>

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

    Dim $lines
    If Not _FileReadToArray("hosts.txt", $lines) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $i = 1 To $lines[0]
    If StringInStr($lines[$i], 'video="1"') <> 0 Then
    $a = _StringBetween($lines[$i], '"', '"')
    EndIf
    Next
    _ArrayDisplay($a, "")

    [/autoit]

    So long,

    Mega

  • Hy,

    ja so geht`s... Herzlichen DANK th.meger!!!

    Hab`s auch noch anders hinbekommen.. Aber nicht so elegant..

    [autoit]

    #include <Array.au3>
    #include <_XMLMdiDOM.au3>

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

    dim $aAttrName[1], $aAttrValue[1], $node, $Master, $openXML, $x

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

    $openXML=_XMLFileOpen(@ScriptDir&"\device.xml")

    if @error or $openXML < 1 then ;wenn Fehler beim öffnen Meldung und Programmende
    MsgBox(0, "Error", "Fehler beim öffnen der Datei: " & @ScriptDir&"\device.xml")
    exit
    endIf

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

    for $x= 1 to 10 ;Abfrage ob Video=1 über 10 Zeilen
    $node = _XMLGetAttrib("//device/*["&$x-1&"]","name",'[@video=1]'); Wenn video=1 name in Variab.
    if $node = -1 then
    MsgBox(0,"Kein Video am Gerät","Index - Nr. "&$x) ;Anzeigen der Index - Nr. bei video=0
    else
    MsgBox(0,"Name des Gerätes mit Video",$node) ;Anzeigen des Namens bei video=1
    endif
    if @error then exitloop
    next

    [/autoit]

    Dazu muss die <_XMLMdiDOM.au3> eingebunden werden (Link)

    Danke für die schnelle Hilfe...
    Gruß