Qt

Liebe/-r Experte/-in,

ich möchte den Text aus einer XML-Datei auslesen.
Der Code hierzu:
QFile file(sAbsXMLFN);
file.open(QIODevice::ReadOnly);
QDomDocument doc(„root“);
doc.setContent(&file,true,&eStr,&eLine,&eColumn);
QString sEntity =
doc.documentElement().firstChild().nodeValue();

Wenn der Inhalt des XML-Elements ein Entity (z.B. ü)
ist,
so erhalte ich ein null-Value im QString,
obwohl mein referenziertes DTD (mydtd.dtd) inkl. Referenz
auf ‚isolat1.ent‘ korrekt ist (‚isolat1.ent‘ definiert
ü).

Wie kann ich QDomDocument verwenden, um die Entities
korrekt einlesen zu können?

Gruss
Ilona

Hallo Ilona,

sorry, QDomDocument habe ich leider nie verwendet.

Grüße Lutz

Hi Ilona,

QDom* habe ich leider zuletzt vor 6 Jahren zuletzt genutzt. Da ich zudem
keinen Zugriff auf die XML Datei habe kann ich nur sehr allgemein
spekulieren.

Du weist in der Zeile
QString sEntity = doc.documentElement().firstChild().nodeValue();

den Wert des ersten Kindes der Wurzel direkt einer Variablen vom Typ
QString zu, d.h. Du implizierst, daß es für diese variable einen Wert
gibt und daß sich dieser in einen String umwandeln lässt. Evtl. solltest
Du zunächst mit
doc.documentElement().firstChild().nodeType ()
zunächst untersuchen, was für eine Node vorliegt?

QDomNode::ElementNode wäre ein Wert von 1, QDomNode::EntityNode wäre 6
(siehe http://doc.trolltech.com/4.5/qdomnode.html#NodeType-…)

Viele Grüße
Wolfgang

ich möchte den Text aus einer XML-Datei auslesen.

[…]

doc.documentElement().firstChild().nodeValue();

Wenn der Inhalt des XML-Elements ein Entity (z.B. ü)
ist,
so erhalte ich ein null-Value im QString,
obwohl mein referenziertes DTD (mydtd.dtd) inkl. Referenz
auf ‚isolat1.ent‘ korrekt ist (‚isolat1.ent‘ definiert
ü).

Hallo Ilona,
ich bin leider nicht ganz sicher, dass ich dein Problem richtig verstehe, aber hilft es dir, wenn ich dich auf folgende
Doku verweise: http://qt.nokia.com/doc/4.6/qdomnode.html#nodeValue ?
Da steht, kurz gesagt, dass nur QDomAttr,QDomCDATASection,QDomComment
QDomProcessingInstruction und QDomText hier etwas Sinnvolles zurueckgeben. Alle anderen sollten einen leeren String zurueckgeben.

Cu,
Z.

Hallo,

mit dtd hab ich da noch nicht gearbeitet.
Was ist den der firstChild()?
Hat der überhaupt einen nodeValue()?
Ist firstChild() der Node den sie wollen, mal mit qDebug() den Namen ausgeben…

Mal eine Gegenfrage, haben sie die Frage auch bei qtForum.de gestellt?

Ja, ich kann untersuchen, was für eine Node vorliegt:
(nodeType() == QDomNode::EntityReferenceNode)
aber den Text der Node bekomme ich nicht.

Meine Versuche, wie
QDomEntityReference er = c.toEntityReference();
QDomCharacterData cd = er.toCharacterData();
waren nicht erfolgreich, den Inhalt der Node bekomme
ich nicht…

Gruss
Ilona

Hallo Ilona,

leider erwischt du mich gerade im Urlaub.

Dennoch bin Ich mir sicher das dir das QT Example http://doc.trolltech.com/4.5/xml-dombookmarks.html weiterhelfen wird. Meines Wissen kommt das Beispiel gut mit den Entities zurecht.

Liebe Grüße: Günter

Danke für das Beispiel!
Der Code funktioniert ganz ähnlich, wie meine
Implementierung.

Langsam habe ich die Befürchtung, dass meine XML-Datei
eine Syntax hat, die zwar von JDOM verstanden wird
(habe ich in JAVA ausprobiert), nicht aber von QDOM.

Hat QDom* mit solchen DTD-Referenzen Probleme wie:
in XML:

und in der DTD:

%ISOlat1;

Hallo Ilona,

Bisher habe ich mit QtXML kaum etwas gemacht - ich muß es mir erstmal anschauen. Vielleicht könntest Du mir Dein XML-Dokumant und Dein Projekt (oder das betreffende Modul) schicken. (-> [email protected])

Gruß,
Kurt

Wenn der Inhalt des XML-Elements ein Entity (z.B. ü)
ist,
so erhalte ich ein null-Value im QString,
obwohl mein referenziertes DTD (mydtd.dtd) inkl. Referenz
auf ‚isolat1.ent‘ korrekt ist (‚isolat1.ent‘ definiert
ü).

Vieleicht ist die XML-Datei in UTF-8 Kodiert, obwohl auf ISOLAT1 verwiesen wird? Im Extremfall kannst du ü als ü schreiben.

Wenn der Inhalt des XML-Elements ein Entity (z.B. ü)
ist,
so erhalte ich ein null-Value im QString,
obwohl mein referenziertes DTD (mydtd.dtd) inkl. Referenz
auf ‚isolat1.ent‘ korrekt ist (‚isolat1.ent‘ definiert
ü).

Vieleicht ist die XML-Datei in UTF-8 Kodiert, obwohl auf ISOLAT1 verwiesen wird? Im Extremfall kannst du ü als ü schreiben.

leider ist die Situation viel trauriger.
Siehe:
http://bugreports.qt.nokia.com/browse/QTBUG-6610