getElementsByTagName eines bestimmten Parent-Node

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • getElementsByTagName eines bestimmten Parent-Node

    Hallo Forum

    Ich versuche grade via VBScript ein Logfile unserer Backup-Software (Symantec BackupExec) automatisch auszulesen. In XML habe ich leider keine Erfahrung und alles was ich im Internet gefunden habe hat mich auch nicht weiter gebracht. Ich habe das Backup-Log mal aufs wesentliche gekürzt:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-16" ?>
    2. <backup>
    3. <machine>
    4. <machine_name>Servername</machine_name>
    5. <set>
    6. <set_resource_name>C: SYSTEM</set_resource_name>
    7. </set>
    8. </machine>
    9. </backup>
    10. ...
    11. <verify>
    12. <set>
    13. <set_resource_name>C: SYSTEM</set_resource_name>
    14. </set>
    15. </verify>
    Alles anzeigen


    Unter anderem will ich natürlich auslesen was gesichert wurde. Dies wird im Node "set_resource_name" gespeichert. Leider ist das Backup-Log in zwei Teile aufgeteilt, der eigentlichen Sicherung (Backup) und einer Überprüfung (Verify). Dummerweise wird der gleiche Nodename verwendet. Mein Problem also ist, dass wenn ich via...

    Quellcode

    1. getElementsByTagName("set_resource_name")


    ...das Log durchsuche, es sowohl die Elemente des Backups- wie die vom Verify-Teils auflistet.

    Kann mir bitte jemand den Code geben, wie ich via VBS nur diejenigen "set_resource_name"-Nodes auslesen kann, die sich innerhalb des <backup></backup>-Teils befinden?

    Gruss
    Devoid

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Devoid ()

  • Bin durch google auch auch die Seite

    Methoden zu XML

    dort ist auch getElementsByTagName beschrieben
    aber es geht nicht
    durch weiters suchen fand ich
    selectSingleNode

    zum testen xml valid gemacht

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-16"?>
    2. <root>
    3. <backup>
    4. <machine>
    5. <machine_name>Servername</machine_name>
    6. <set>
    7. <set_resource_name>C: SYSTEM im Backup</set_resource_name>
    8. </set>
    9. </machine>
    10. </backup>
    11. <verify>
    12. <set>
    13. <set_resource_name>C: SYSTEM im Verify</set_resource_name>
    14. </set>
    15. </verify>
    16. </root>
    Alles anzeigen


    in einer Html datei vbs code getestet
    selectSingleNode arbeitet ähnlich wie xpath.
    Daruch kann der Knoten der gesucht wird bestimmt werden

    HTML-Quellcode

    1. <html>
    2. <body>
    3. <script type="text/vbscript">
    4. Dim xmlDoc, Root
    5. Set xmlDoc = CreateObject("Msxml2.DOMDocument")
    6. xmlDoc.async = False
    7. xmlDoc.load("c:\xml\testvbs.xml")
    8. document.write("<h1>" + xmlDoc.selectSingleNode("//backup/machine/set/set_resource_name").text + "</h1>")
    9. document.write("<h1>" + xmlDoc.selectSingleNode("//verify/set/set_resource_name").text + "</h1>")
    10. </script>
    11. </body>
    12. </html>
    Alles anzeigen


    Ergebniss

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Transitional//EN"><META http-equiv="Content-Type" content="text/html; charset=windows-1252">
    2. <HTML>
    3. <HEAD></HEAD>
    4. <BODY>
    5. <H1>
    6. C: SYSTEM im Backup
    7. </H1>
    8. <H1>
    9. C: SYSTEM im Verify
    10. </H1>
    11. </BODY>
    12. </HTML>
    Alles anzeigen
    Helmut Hagemann
    Derjenige, der sagt: Das geht nicht, soll den nicht stören, der's gerade tut.
  • Hi XML_Looser

    Danke für deine Antwort. Auf das SelectSingleNode war ich auch schon gestossen, kam aber damit klar. Und wenn ich deinen Code probiere kommt es zu einem Fehler. Also erstmal habe ich ihn kurz angepasst in:

    Quellcode

    1. Dim xmlDoc, Root
    2. Set xmlDoc = CreateObject("Msxml2.DOMDocument")
    3. xmlDoc.async = False
    4. xmlDoc.load("c:\testxml.xml")
    5. wscript.echo xmlDoc.selectSingleNode("//backup/machine/set/set_resource_name").text


    Das ganze soll nämlich als eigenständiges VBS ablaufen. Fehler den ich erhalte: "Objekt erforderlich: 'selectSingleNode(...)'. Laufzeitfehler in Microsoft VBScript-Fehler '800a01a8'."

    Ausserdem, geht es mit selectSingleNode wirklich für meine Zwecke? Vielleicht habe ich das Original-XML etwas zu stark gekürzt, aber sowohl unter dem Backup-, wie unter dem Verify-Teil wiederholen sich die Struktur. Vielleicht besseres Beispiel:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-16" ?>
    2. <backup>
    3. <machine>
    4. <machine_name>Servername</machine_name>
    5. <set>
    6. <set_resource_name>C: SYSTEM</set_resource_name>
    7. </set>
    8. <set>
    9. <set_resource_name>D: Daten</set_resource_name>
    10. </set>
    11. </machine>
    12. </backup>
    13. ...
    14. <verify>
    15. <set>
    16. <set_resource_name>C: SYSTEM</set_resource_name>
    17. </set>
    18. <set>
    19. <set_resource_name>D: Daten</set_resource_name>
    20. </set>
    21. </verify>
    Alles anzeigen


    Es soll mir also nicht einen einzelnen Node, sondern eben alle Nodes "Set_Resource_Name" anzeigen, aber halt nur solche die sich unter dem Backup-Teil befinden. Ich denke sobald mir jemand mal ein Beispiel geben kann das funktioniert, dass ich alle anderen Abfragen die ich plane (gesicherte Datenmenge, Errormeldungen) daraus selbstständig ableiten kann. Aber momentan tue ich mich schwer damit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Devoid ()

  • Die Lösung lautet

    Quellcode

    1. Dim xmlDoc, xmlFileName
    2. If WScript.Arguments.Count > 0 Then
    3. xmlFileName = WScript.Arguments(0)
    4. Else
    5. xmlFileName = "C:\br\menus\testvbs.xml"
    6. end If
    7. Set xmlDoc = CreateObject("MSXML2.DOMDocument.4.0")
    8. 'WScript.Echo "Filename=" & xmlFileName
    9. xmlDoc.load (xmlFileName)
    10. If xmlDoc.parseError.errorCode Then
    11. Wscript.Echo "Parse Error: " & vbcrlf & _
    12. " Reason = " & xmlDoc.parseError.reason & vbcrlf & _
    13. " Line = " & xmlDoc.parseError.line & vbcrlf & _
    14. " linePos = " & xmlDoc.parseError.linePos & vbcrlf & _
    15. " srcText = " & xmlDoc.parseError.srcText & vbcrlf & _
    16. " ErrorCode = " & xmlDoc.parseError.ErrorCode & vbcrlf
    17. WScript.quit
    18. else
    19. 'WScript.Echo xmlDoc.xml
    20. End If
    21. set nodes = xmlDoc.selectNodes("//verify/set/set_resource_name")
    22. 'set nodes = xmlDoc.selectNodes("//backup//set/set_resource_name")
    23. For Each node In nodes
    24. WScript.Echo node.xml
    25. Next
    26. WScript.Echo "The end"
    Alles anzeigen


    Quellcode

    1. Microsoft (R) Windows Script Host, Version 5.7
    2. Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
    3. <set_resource_name>C: SYSTEM im Verify</set_resource_name>
    4. <set_resource_name>C: SYSTEM im Verify</set_resource_name>
    5. The end
    Helmut Hagemann
    Derjenige, der sagt: Das geht nicht, soll den nicht stören, der's gerade tut.