Daten Filtern mit JDOM

Hallo Leute,

ich möchte gerne eine XML Datei mit JDOM einlesen, bearbeiten und auslesen.
Einlesen und Auslesen klappt ja wunderbar, leider habe ich ein paar kleine Probleme mit dem Bearbeiten.

Ich möchte beispielsweise komplette Elemente bzw. Unterelemente löschen falls bestimmte Ausdrücke im Content, in den Attributen oder in den Namespaces auftauchen. Daher verwende ich hierfür java.util.regex .

Nun komme ich leider absolut nicht weiter. Wie sage ich JDOM dass er bei einem gefundenen Ausdruck nicht auslesen soll?!

Mein Code:

//lese datei ein:
SAXBuilder builder = new SAXBuilder(false);

Documentdoc=builder.build(newFileInputStream(„U:/irgendeineDatei.xml“));

Element elRoot = doc.getRootElement();

//finde Namespace bzw. Attribut bzw. Content mit Ausdruck „World“
//funktioniert so aber nicht ganz!

String abc=".*?World.*?";
Pattern pattern=Pattern.compile(abc,Pattern.DOTALL|Pattern.MULTILINE);

Matcher matcher = pattern.matcher(doc.toString()); //richtig? Kann ich
//das Dokument als String zum matchen überhaupt verwenden?

boolean a=matcher.find();

//Hier sollte etwas passieren was die Namespaces, Attribute oder den
//Content filtert und somit nicht an die Ausgabe schikt.

XMLOutputter outputter = new XMLOutputter();

FileWriter writer = new FileWriter(„U:/JDomTester.rdf“);
outputter.output(elRoot, writer);
writer.close();

}

-Danke schonmal im Vorraus!!

Hey.

Daher verwende ich hierfür java.util.regex.

Warum nicht über XPath die gewünschen Nodes suchen?
JDOM unterstützt meines Wissens auch XPath. Also warum nicht über ein XPath-Statement sich die entsprechenden Nodes geben lassen und dann aus dem Document löschen?!
Zu XPath gibts ein schönes Tutorial: http://www.zvon.org/xxl/XPathTutorial/General/exampl….

Viel Erfolg noch,
Chris

Hi,

Warum nicht über XPath die gewünschen Nodes suchen?

Weil ich mit Regulären Ausdrücken arbeiten möchte. Beispielsweise möchte ich alle Knoten in denen das Wort „Hallo“ vorkommt löschen.
Bsp:
[…]
String ersWord=".*?Hallo.*?";
[…]

Und das geht nicht mit XPath denke ich.

Beispielsweise möchte ich alle Knoten in denen das Wort
„Hallo“ vorkommt löschen.

Ohne genau zu wissen wie deine XML-Datei aufgebaut ist, würde ich es auf die Schnelle mal damit versuchen:

//\*[contains(string(self::\*), "Hallo") and count(child::\*) = 0]

Gruss,
Chris