TinyXML
-
Hallo,
ich habe folgenden Anfang einer XML-Datei:<?xml version="1.0" standalone="no"?>
<!DOCTYPE project SYSTEM "./project.dtd" [
<!-- PUT INTERNAL DOCUMENT TYPE DEFINITION SUBSET HERE -->
]>
<project name="18_04...Das lesen mittels TinyXML
XMLdoc.LoadFile()
wird mit true quitiert. Allerdings funktioniert dannach gar nichts mehr.
TiXmlElement *pRoot = XMLdoc.FirstChildElement( "project" );
pRoot wird immer 0.
Lösche ich hingegen:<!DOCTYPE project SYSTEM "./project.dtd" [
<!-- PUT INTERNAL DOCUMENT TYPE DEFINITION SUBSET HERE -->
]>aus der xml-Datei raus, funktioniert alles wunderbar.
Die Datei "project.dtd" liegt natürlich im selben Verzeichnis wie die xml-Datei.
Hat jemand eine Idee, warum TinyXML an dieser Stelle nicht mehr funktioniert?
-
Lies nochmals die Dokumentation durch:
http://www.grinninglizard.com/tinyxmldocs/index.htmlVor allem der Abschnitt: What it doesn't do.
Grüssli
-
Ja, danke.
Eigentlich interessiert mich diese DTD-Datei überhaupt nicht. Und lösche ich diesen "Link" aus der XML-Datei funktioniert es ja auch so, wie ich es brauche.
Aber TinyXML scheint es wohl nicht ignorieren zu können.
Welcher XML-Parser ist ansonsten empfehlenswert, und kann mit diesem DTD-Krams umgehen?
-
"Kann mit diesem DTD-Krams umgehen" = Kann es erfolgreich ignorieren (afaik sollte das auch TinyXML können?!) oder = Kann es erfolgreich parsen und die Datei gegen dieses DTD validieren?
MfG SideWinder
-
@SideWinder: Nee, da muss nichts validiert werden, da es ja funktioniert, wenn ich den "Link" rausnehme. Und was TinyXML macht, habe ich ja in der Fragestellung beschrieben: Es liest erfolgreich die Datei ein, ich finde dann aber keine Einträge mehr.
-
MiP schrieb:
Aber TinyXML scheint es wohl nicht ignorieren zu können.
Wie ich gesagt habe, lies den Abschnitt. Dort steht ganz klar, das TinyXML diesen Bereich nicht ignorieren kann, denn das ist ein Syntax-Fehler für TinyXML. Für TinyXML ist das ein Kommentar in einem DOCTYPE-Element, was der XML-Syntax ohne DTD-Syntax ganz klar widerspricht.
Wieso dass TinyXML true zurückgibt, weiss ich allerdings auch nicht.MiP schrieb:
Welcher XML-Parser ist ansonsten empfehlenswert, und kann mit diesem DTD-Krams umgehen?
Empfehlenswert ... keiner?
Naja, sobald sie mit DTD-Umgehen können, bzw. ignorieren, können sie es meistens auch schon anwenden. Daher bekommt man oft einen etwas grösseren Parser, wie der Xerces von Apache. Die sind dann aber auch oft in C geschrieben und ziemliche Giganten.
Hier ein paar frei verfügbare XML Parser:
http://lars.ruoff.free.fr/xmlcpp/Grüssli