Löschen von Knoten

04/07/2009 - 14:14 von Kurt Langeder | Report spam
Hallo Newsgroup!

Ich habe da ein Problem beim Löschen von gesamten XML-Knoten unter
Visual-Basic.
Der Aufbau der XML-Datei sieht vereinfacht so aus:

<?xml version="1.0" encoding="ISO-8859-1"?>
<PAKET>
<FILIALE FilialID="1" Aktion="Neu">
<PERSON Name="Person1_1" Ort="Ort1_1" Strasse="Strasse1_1">
</PERSON>
<PERSON Name="Person1_2" Ort="Ort1_2" Strasse="Strasse1_2">
</PERSON>
</FILIALE>

<FILIALE FilialID="1" Aktion="Loeschen">
<PERSON Name="Person1_3" Ort="Ort1_3" Strasse="Strasse1_3">
</PERSON>
</FILIALE>

<FILIALE FilialID="2" Aktion="Neu">
<PERSON Name="Person2_1" Ort="Ort2_1" Strasse="Strasse2_1">
</PERSON>
</FILIALE>

<FILIALE FilialID="3" Aktion="Loeschen">
<PERSON Name="Person3_1" Ort="Ort3_1" Strasse="Strasse3_1">
</PERSON>
<PERSON Name="Person3_2" Ort="Ort3_2" Strasse="Strasse3_2">
</PERSON>
<PERSON Name="Person3_3" Ort="Ort3_3" Strasse="Strasse3_3">
</PERSON>
</FILIALE>

<FILIALE FilialID="4" Aktion="Loeschen">
<PERSON Name="Person4_1" Ort="Ort4_1" Strasse="Strasse4_1">
</PERSON>
</FILIALE>
</PAKET>

Ich muss jetzt alle Filial-Konten löschen, bei denen die Aktion "Löschen" ist. Das Ergebnis sollte dann so aussehen:

<PAKET>
<FILIALE FilialID="1" Aktion="Neu">
<PERSON Name="Person1_1" Ort="Ort1_1" Strasse="Strasse1_1">
</PERSON>
<PERSON Name="Person1_2" Ort="Ort1_2" Strasse="Strasse1_2">
</PERSON>
</FILIALE>

<FILIALE FilialID="2" Aktion="Neu">
<PERSON Name="Person2_1" Ort="Ort2_1" Strasse="Strasse2_1">
</PERSON>
</FILIALE>
</PAKET>

Mein Ansatz bis jetzt:

Dim xd As Object, remove_node As Object
Set xd = CreateObject("MSXML.DOMDocument")
xd.Load "C:\Filiale.XML"
Set remove_node xd.selectSingleNode("/PAKET/FILIALE[Aktion='Loeschen']")
xd.documentElement.removeChild remove_node
xd.Save "C:\Filiale_neu.XML"

Das funktioniert aber nicht, da der "selectSingleNode"-Befehl IMHO
auch als Suchkriterium "FilialID=" braucht. Da die Anzahl der
FILIALE-Knoten aber variabel ist, müsste das irgendwie mit einer
For-Each-Schleife gemacht werden?! Wer kann mir da weiterhelfen?

Danke und Schöne Grüße
Kurt
 

Lesen sie die antworten

#1 Martin Honnen
04/07/2009 - 14:37 | Warnen spam
Kurt Langeder wrote:

Ich habe da ein Problem beim Löschen von gesamten XML-Knoten unter
Visual-Basic.
Der Aufbau der XML-Datei sieht vereinfacht so aus:

<?xml version="1.0" encoding="ISO-8859-1"?>
<PAKET>
<FILIALE FilialID="1" Aktion="Neu">
<PERSON Name="Person1_1" Ort="Ort1_1" Strasse="Strasse1_1">
</PERSON>
<PERSON Name="Person1_2" Ort="Ort1_2" Strasse="Strasse1_2">
</PERSON>
</FILIALE>

<FILIALE FilialID="1" Aktion="Loeschen">
<PERSON Name="Person1_3" Ort="Ort1_3" Strasse="Strasse1_3">
</PERSON>
</FILIALE>

<FILIALE FilialID="2" Aktion="Neu">
<PERSON Name="Person2_1" Ort="Ort2_1" Strasse="Strasse2_1">
</PERSON>
</FILIALE>

<FILIALE FilialID="3" Aktion="Loeschen">
<PERSON Name="Person3_1" Ort="Ort3_1" Strasse="Strasse3_1">
</PERSON>
<PERSON Name="Person3_2" Ort="Ort3_2" Strasse="Strasse3_2">
</PERSON>
<PERSON Name="Person3_3" Ort="Ort3_3" Strasse="Strasse3_3">
</PERSON>
</FILIALE>

<FILIALE FilialID="4" Aktion="Loeschen">
<PERSON Name="Person4_1" Ort="Ort4_1" Strasse="Strasse4_1">
</PERSON>
</FILIALE>
</PAKET>

Ich muss jetzt alle Filial-Konten löschen, bei denen die Aktion > "Löschen" ist.



Im XML steht aber "Loeschen", nicht "Löschen".
Also:

Set doc = CreateObject("Msxml2.DOMDocument.3.0")
doc.async = False
If doc.load("file.xml") Then
doc.setProperty "SelectionLanguage", "XPath"
For Each fil In doc.selectNodes("PAKET/FILIALE[@Aktion = 'Loeschen']")
fil.parentNode.removeChild fil
Next
doc.save "file1.xml"
Else
WScript.Echo doc.parseError.reason
End If


Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen