aletri
Goto Top

Per VBS bestimmten Knoten aus XML Datei entfernen

Guten Morgen allerseits

Mit diesem Script möchte ich bestimmten Knoten aus XML Datei entfernen.

Der Script wird ohne Fehlermeldung ausgeführt aber in der XML Datei verändert sich nichts!

Ich brauche eure Hilfe!

Hier der Script:

Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")  

xmlDoc.Async = "False"  
xmlDoc.Load("C:\mein Pfad\AutogenDescriptons.xml")  

Set colNodes=xmlDoc.selectNodes _
  ("/Autogen.SeasonalModels/ModelEntry [id='{28309303-cda3-4047-9c35-511131a46063}']")  

For Each objNode in colNodes
  xmlDoc.documentElement.removeChild _
    (objNode)
Next
  
xmlDoc.Save "C:\mein Pfad\AutogenDescriptions.xml"   

Dies ist nur ein Auszug zum besseren Verständnis, in der original Datei
sind dutzende dieser Einträge vorhanden!

e790bda2f967aba8cf94f25bf8c6415c

Content-ID: 288462

Url: https://administrator.de/contentid/288462

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

114757
Lösung 114757 15.11.2015 aktualisiert um 16:30:08 Uhr
Goto Top
Dein xPath-Filter war nicht korrekt ... Erstens hattest du nur einen führenden Backslash angegeben, was bedeutet das du vom Root aus die Knoten suchst, was aber in deinem Fall nicht korrekt ist das der Knoten ein Subknoten des Document-Root ist und zweitens hast du das @ vor dem Attribut vergessen ....
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")  
xmlDoc.Async = False
xmlDoc.Load("C:\mein Pfad\AutogenDescriptons.xml")  
Set colNodes = xmlDoc.selectNodes("//Autogen.SeasonalModels/ModelEntry[@id='{28309303-cda3-4047-9c35-511131a46063}']")  

If not colNodes is Nothing then
    For each objNode in colNodes
         objNode.ParentNode.RemoveChild(objNode)
    Next
xmlDoc.Save "C:\mein Pfad\AutogenDescriptions.xml"   
End if
Gruß jodel32
aletri
aletri 15.11.2015 um 11:38:24 Uhr
Goto Top
Hallo jodel32

Besten Dank

Irgend etwas mach ich trotzdem noch falsch!
Nach ausführen des Scripts ist die ganze XML Datei leer!!

Gruss
aletri
114757
114757 15.11.2015 aktualisiert um 11:54:22 Uhr
Goto Top
Kann ich nicht bestätigen, läuft hier einwandfrei ...
Da kannst du uns und dir nur helfen indem du die ganze Datei mal postest oder besser via PM zuschickst.
aletri
aletri 15.11.2015 aktualisiert um 12:06:54 Uhr
Goto Top
114757
114757 15.11.2015 aktualisiert um 12:23:23 Uhr
Goto Top
Ergebnis nach dem Anwenden mit exakt dem selben Code von oben, so wie du es haben wolltest....

-edit- Code geändert ?? Dann bitte auch mit Codetags!!

Aber auch mit dem kompletten Code selbes positives Ergebnis hier ...
aletri
aletri 15.11.2015 aktualisiert um 13:38:23 Uhr
Goto Top
Hallo jodel32

leider klappt es bei mir nicht hab nur die Pfade angepasst !

Die Testdatei wie die Originaldatei werden komplett geleert!!

Codetags ?

gruss
aletri
122990
122990 15.11.2015 um 13:52:06 Uhr
Goto Top
leider klappt es bei mir nicht hab nur die Pfade angepasst !
Die Testdatei wie die Originaldatei werden komplett geleert!!
Moin,
kann @114757 hier beipflichten, funktioniert hier ebenfalls einwandfrei. Da muss entweder deine Datei beschädigt sein oder dein Rechner kommt mit der großen XML-Datei einfach nicht zurecht.
Codetags ?
Code-Tags

Gruß grexit
aletri
aletri 15.11.2015 um 14:24:30 Uhr
Goto Top
Hallo Leute

Besten Dank für euren Einsatz!

Habe Code leicht abgeändert jetzt funktionierts bei mir auch !?:

hier der Code der bei mir geht:
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")  

xmlDoc.Async = "False"  
xmlDoc.Load("C:\AutogenDescriptions.xml")  

Set colNodes=xmlDoc.selectNodes _
  ("//Autogen.SeasonalModels/ModelEntry [@id='{28309303-cda3-4047-9c35-511131a46063}']")  

If not colNodes is Nothing then
    For each objNode in colNodes
         objNode.ParentNode.RemoveChild(objNode)
Next
  
xmlDoc.Save "C:\AutogenDescriptions.xml"  
End if
114757
114757 15.11.2015 aktualisiert um 16:33:25 Uhr
Goto Top
Zitat von @aletri:
Habe Code leicht abgeändert jetzt funktionierts bei mir auch !?:
xmlDoc.Async = "False"
Les doch bitte mal
https://msdn.microsoft.com/de-de/library/ms761398(v=vs.85).aspx
Da kannst du sehen das die Eigenschaft async einen Boolean-Wert erwartet und keinen String was du hier machst. Einen nicht leereren String würde der Compiler als True werten, was in diesem Fall genau das Gegenteil bewirkt weil wir hier False benötigen damit das Dokument synchron und nicht asynchron geladen wird.
Genau damit läuft das Skript hier nämlich in einen Fehler. Muss bei dir also irgendeinen anderen Grund gehabt haben.
Kann ja nicht angehen das bei dir sich die Welt anders rum dreht, @122990 hats ja auch bestätigt.