JDOM getText() mit Seperator <sep/>

magicalex

Grünschnabel
Hallo

mein Problem ist, dass ich aus einen MathML (XML-basiert) Element einen Text auslesen muss, der jedoch durch einen Seperator getrennt ist.

<cn type="rational"> 12342 <sep/> 2342342 </cn>

Wenn ich die Methode getText() verwende bringt er mir die erste Zahl, ein Leerzeichen und die zweite Zahl. Jedoch muss ich zwischen die beiden Zahlen im String etwas einfügen.

Codeausschnitt:

if (o instanceof Element) {
Element element = (Element) o;
if (element.getName() == "cn") {
if (type.equals("rational")) {
String inhalt = element.getText();
// Hätte hier gern zwei Strings, einen für die erste und einen für die zweite Zahl
}
}
}

Ich hoffe das irgendjemand schon Erfahrungen mit dieser Thematik gemacht hat. Vielen Dank im Vorab!

MfG
alex
 
Code:
// doc erstellen
Document doc = new Document();
Element cn = new Element("cn");
doc.setRootElement(cn);
cn.setText("1234");
Element sep = new Element("sep");
cn.addContent(sep);
cn.addContent("292929");
	
// etwas in sep einfuegen.
doc.getRootElement()
.getChild("sep").setText("dazu");

XMLOutputter putter = new XMLOutputter();
try {
	putter.output(doc,System.out); 
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

Hoffe dich richtig verstanden zu haben :)
 
Danke!

Super, konnte es mit der Methode getContent() lösen.

Hätte da noch eine kleine Frage:

Ich habe mehrere Elemente, die einen Text enthalten, der mit & beginnt und ; abschliesst. Beispiele:

<mo>&int;</mo>
<mo>&DifferentialD;</mo>

Wenn ich hier den Text auslese, bringt er mir immer ein ? als Textinhalt. Ich muss jedoch anhand des Textinhaltes das weitere Vorgehen bestimmen.

MfG
 
Re: Danke!

Original geschrieben von magicalex
Super, konnte es mit der Methode getContent() lösen.

Hätte da noch eine kleine Frage:

Ich habe mehrere Elemente, die einen Text enthalten, der mit & beginnt und ; abschliesst. Beispiele:

<mo>&int;</mo>
<mo>&DifferentialD;</mo>

Wenn ich hier den Text auslese, bringt er mir immer ein ? als Textinhalt. Ich muss jedoch anhand des Textinhaltes das weitere Vorgehen bestimmen.

Das kommt daher das dies als Entitys gesehen wird. Wie z.b bei html &uuml; entity sind. Eine lösung währe die nutzung von CDATA
http://www.w3schools.com/xml/xml_cdata.asp

Code:
<mo><![CDATA[&int;]]></mo>

Dies sorgt dafür das der Inhalt der Tags niemals irgendwie interpretiert wird.
Mit JDOM setzt du CDATA durch

Code:
cn.addContent(new CDATA("292929"));
 
Auslesen

ich habe noch einmal versucht über getContent() an den Entity zu kommen, habe auch so alle möglichen cast-Versuche gestartet. Komme einfach nicht an die CDATA ran.

Wenn ich das Element selbst mit einem CDATA Inhalt erzeuge, kann er es auch erkennen...eigenwillig

vielleicht hast die ja noch einen guten Vorschlag...schon mal danke
 
Re: Auslesen

Original geschrieben von magicalex
ich habe noch einmal versucht über getContent() an den Entity zu kommen, habe auch so alle möglichen cast-Versuche gestartet. Komme einfach nicht an die CDATA ran.

Wenn ich das Element selbst mit einem CDATA Inhalt erzeuge, kann er es auch erkennen...eigenwillig

vielleicht hast die ja noch einen guten Vorschlag...schon mal danke
Steht es denn als CDATA auch im Dokument drinne?
 
Lösung

möchte gern der Vollstänigkeit halber die Lösung für mein Problem hier mit anführen...vielleicht helfe ich ja jemand mit ähnlichem Problem weiter

es lag am SaxBuilder:

builder.setExpandEntities(false);

This sets whether or not to expand entities for the builder. A true means
to expand entities as normal content. A false means to leave entities
unexpanded as EntityRef objects. The default is true.

MfG
 
Zurück