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?
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?
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.
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…
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:
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])
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.