Hallo allesamt,
ich hätte mal eine Frage zum Thema XML, da ich selber nur minimal Ahnung davon habe. Ich möchte ein XML file mit in etwa folgendem Inhalt parsen:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
Mit Qt's DOM lief das AFAIR problemlos, ein anderer rudimentärer XML parser namens xmlpopper oder so lief auch (der machte allerdings keinerlei Überprüfung, sondern parste nur), expat, was jetzt verwendet werden soll, meckert wegen "malformed XML". Frage: Wie muß die Datei aussehen, damit sie vernünftig geparsed wird? Brauche ich noch irgendwie eine DTD oder was weiß ich dazu?
cu, Ulf
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
[...]
sondern parste nur), expat, was jetzt verwendet werden soll, meckert wegen "malformed XML". Frage: Wie muß die Datei aussehen, damit sie vernünftig geparsed wird? Brauche ich noch irgendwie eine DTD oder was weiß ich dazu?
Ich habe mit expat das Problem, daß es keine Zeilenumbrüche schluckt. Ich hab die Dateien dann (automatisch generiert) einfach einzeilig gehalten. Das ist aber echt doof. Probiert das doch mal, wenns dann geht, weißt Du in welche Richtung Du suchen mußt. (und kannst das Ergebnis verraten...;-)
Ansonsten:
- das <?xml version="1.0"?> Tag ist vorhanden? - es gibt nur EIN root-Element? - poste doch mal die ganze Datei, wenn sie nicht zu groß ist oder mail sie mir
Gruß, Eric
On Sat, Aug 25, 2001 at 03:27:29PM +0200, Eric Schaefer wrote:
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
[...]
sondern parste nur), expat, was jetzt verwendet werden soll, meckert wegen "malformed XML". Frage: Wie muß die Datei aussehen, damit sie vernünftig geparsed wird? Brauche ich noch irgendwie eine DTD oder was weiß ich dazu?
Ich habe mit expat das Problem, daß es keine Zeilenumbrüche schluckt. Ich hab die Dateien dann (automatisch generiert) einfach einzeilig gehalten. Das ist aber echt doof. Probiert das doch mal, wenns dann geht, weißt Du in welche Richtung Du suchen mußt. (und kannst das Ergebnis verraten...;-)
Hat nicht geholfen.
Ansonsten:
- das <?xml version="1.0"?> Tag ist vorhanden?
jetzt ja :)
- es gibt nur EIN root-Element?
logo.
- poste doch mal die ganze Datei, wenn sie nicht zu groß ist oder mail sie mir
Ich poste gleich mal eine minimal modifizierte (i.e. tw. auskommentierte) Version des Quellcodes gleich mit (keine Angst, sind nicht mal 4 kb :)), da könnt ihr es ausprobieren.
Gruß, Eric
cu, Ulf
On Mon, Aug 27, 2001 at 09:33:59PM +0200, Ulf Lorenz wrote:
On Sat, Aug 25, 2001 at 03:27:29PM +0200, Eric Schaefer wrote:
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
Ich poste gleich mal eine minimal modifizierte (i.e. tw. auskommentierte) Version des Quellcodes gleich mit (keine Angst, sind nicht mal 4 kb :)), da könnt ihr es ausprobieren.
default.xml lässt sich mit meinem XML-Parser (pyXML) ohne Probleme parsen.
On Mon, Aug 27, 2001 at 11:45:21PM +0200, Thomas Guettler wrote:
On Mon, Aug 27, 2001 at 09:33:59PM +0200, Ulf Lorenz wrote:
On Sat, Aug 25, 2001 at 03:27:29PM +0200, Eric Schaefer wrote:
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
Ich poste gleich mal eine minimal modifizierte (i.e. tw. auskommentierte) Version des Quellcodes gleich mit (keine Angst, sind nicht mal 4 kb :)), da könnt ihr es ausprobieren.
default.xml lässt sich mit meinem XML-Parser (pyXML) ohne Probleme parsen.
Vielleicht validiert pyXML nicht?
Ich hätte trotzdem gerne expat, weil die Widgetlib, auf die das Spiel aufbaut, expat als Parser für ihre Themebeschreibungen voraussetzt und ich keine über- flüssigen Dependencies haben wollte. (was mich auf die Idee bringt, mir viel- leicht mal diese Themefiles anzuschauen, mmmh...)
Falls es partout nicht gehen sollte und ihr auch keinen Rat habt, kenne ich auch noch eine schnuckelige Headerlib namens XMLPullParser bestehend aus ~8 Dateien, aber nur für das bißchen Primitivparsen noch einen eigenen Parser einzubinden würde ich gerne vermeiden.
Thomas Guettler thomas@thomas-guettler.de
cu, Ulf
default.xml lässt sich mit meinem XML-Parser (pyXML) ohne Probleme parsen.
Vielleicht validiert pyXML nicht?
Es kann ja auch gar nicht validiert werden. Es existiert keine DTD.
Wichtiger Unterschied: +Validiert wird anhand einer DTD. +Wohlgeformt ist ein Dokument wenn es der XML-Syntax entspricht.
On Tuesday 28 August 2001 21:44, Ulf Lorenz wrote:
Ich hätte trotzdem gerne expat, weil die Widgetlib, auf die das Spiel aufbaut, expat als Parser für ihre Themebeschreibungen voraussetzt und ich keine über- flüssigen Dependencies haben wollte. (was mich auf die Idee bringt, mir viel- leicht mal diese Themefiles anzuschauen, mmmh...)
Für den nicht unwahrscheinlichen Fall, daß auch für das Netzwerkprotokoll XML eingesetzt werden sollte, ist expat auf alle Fälle die bessere Wahl, weil das Streaming besser unterstützt wird. DOM-orientierte Interfaces wollen immer gleich alles von <root> bis </root> haben, damit ist kein wirkliches Streaming möglich. Siehe auch die Kommentare in den Quelltexten diverser Projekte... z.B. Qt :-)
Josef Spillner
On Wed, Aug 29, 2001 at 07:54:25PM +0200, Josef Spillner wrote:
Für den nicht unwahrscheinlichen Fall, daß auch für das Netzwerkprotokoll XML eingesetzt werden sollte, ist expat auf alle Fälle die bessere Wahl, weil das Streaming besser unterstützt wird. DOM-orientierte Interfaces wollen immer gleich alles von <root> bis </root> haben, damit ist kein wirkliches Streaming möglich. Siehe auch die Kommentare in den Quelltexten diverser Projekte... z.B. Qt :-)
Guter Punkt!
Auch wenn man sehr große Dateien nur "durchwursteln" will, ist das recht brauchbar (man behandelt das dann wie einen Stream).
Gruß, Eric
On Wed, Aug 29, 2001 at 07:54:25PM +0200, Josef Spillner wrote:
Für den nicht unwahrscheinlichen Fall, daß auch für das Netzwerkprotokoll XML eingesetzt werden sollte, ist expat auf alle Fälle die bessere Wahl, weil das Streaming besser unterstützt wird.
Mmmmhh.., ich vermute mal, das kommt ganz drauf an, welches Netzwerkprotokoll GGZ unterstützt. *g*
DOM-orientierte Interfaces wollen immer gleich alles von <root> bis </root> haben, damit ist kein wirkliches Streaming möglich. Siehe auch die Kommentare in den Quelltexten diverser Projekte... z.B. Qt :-)
Dafür sind DOM-Interfaces manchmal IMO irgendwie komfortabler, weil man nicht aufpassen muß, in welcher Verästelung des Dokuments man gerade ist, sondern das selber bestimmen kann.
Ich finde es zwar recht hübsch, hier meine XML-Kenntnisse in einer Diskussion ein bißchen auszubauen, aber mein Problem ist immer noch nicht gelöst. Mal so als abschließende Fragen: 1) hat jemand eine Idee/Lösung? :) 2) Kann jemand die Codefragmente compilieren und bekommt von expat einen "malformed xml" Fehler vorgesetzt? Wenn nicht, was ist bei euch etc.
Im Falle 2) würde ich sonst einen bugreport an die expat-Entwickler schreiben, aber erst würde ich gerne wissen, ob ich der einzige bin, bei dem der Fehler auftritt.
Josef Spillner
Ulf
PS an Josef: http://www.ageofmagic.org. Das (werdende) Spiel steht AFAIK noch nicht unter GPL, das wäre doch was für dich zum Konvertieren. :)
On Wednesday 29 August 2001 22:30, Ulf Lorenz wrote:
Mmmmhh.., ich vermute mal, das kommt ganz drauf an, welches Netzwerkprotokoll GGZ unterstützt. *g*
Protocol Version 5 nennt sich das in Insiderkreisen jetzt. Aber abgesehen davon gehören wir, was Versionsnummern angeht, zu den absoluten konservativen Versionsnummern-Kleinhaltern. Als wir mit Erschrecken feststellen mußten, daß die übernächste Version schon 0.1 ist, haben wir uns entschlossen schnell noch 0.0.6 als Zwischenschritt einzubauen :)
- Kann jemand die Codefragmente compilieren und bekommt von expat einen
"malformed xml" Fehler vorgesetzt? Wenn nicht, was ist bei euch etc.
Hm, welche expat-Version ist das? Ich habe 1.2, da gibt es kein XML_SetStartElementHandler.
Im Falle 2) würde ich sonst einen bugreport an die expat-Entwickler schreiben, aber erst würde ich gerne wissen, ob ich der einzige bin, bei dem der Fehler auftritt.
Also Expat 2.x? Weil bei 1.x nur James Clark allein entwickelt hat. Ich werde dann wohl mal updaten...
PS an Josef: http://www.ageofmagic.org. Das (werdende) Spiel steht AFAIK noch nicht unter GPL, das wäre doch was für dich zum Konvertieren. :)
Ma guggn...
Josef Spillner
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
Hallo allesamt,
ich hätte mal eine Frage zum Thema XML, da ich selber nur minimal Ahnung davon habe. Ich möchte ein XML file mit in etwa folgendem Inhalt parsen:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
Eine Möglichkeit warum das "malformed XML" sein könnte ist, weil du die Attribute nicht in Hochkomma hast.
also Strength="8" oder Strength='8'
On Sun, Aug 26, 2001 at 10:36:06AM +0200, Thomas Guettler wrote:
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
Hallo allesamt,
ich hätte mal eine Frage zum Thema XML, da ich selber nur minimal Ahnung davon habe. Ich möchte ein XML file mit in etwa folgendem Inhalt parsen:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
Eine Möglichkeit warum das "malformed XML" sein könnte ist, weil du die Attribute nicht in Hochkomma hast.
also Strength="8" oder Strength='8'
Ups, hab ich in meinem Beispiel vergessen, die Attribute sind völlig korrekt (da hatte sich Qt am Anfang mal beschwert :)). Expat meckert schon bei der ersten Zeile.
Ich hab mir schon einen Test zusammengebastelt, und probier mal Erics Tips aus, ansonsten verkleinere ich ihn mal ein bißchen und schick ihn an die Liste.
Ulf
Expat meckert schon bei der ersten Zeile.
Expat ist ein sehr verbreiteter Parser. Die Wahrscheinlichkeit liegt 99:1 das der Fehler in deiner Datei liegt und nicht bei Expat.
Du wirst wahrscheinlich nicht Unicode als Zeichensatz verwenden, also lautet die erste Zeile:
<?xml version="1.0" encoding="iso-8859-1"?>
Erstelle mal eine minimale Datei bei der der Fehler auftritt und schick sie hier her.
Happy Hacking!
On Mon, Aug 27, 2001 at 10:38:26PM +0200, Thomas Guettler wrote:
Expat meckert schon bei der ersten Zeile.
Expat ist ein sehr verbreiteter Parser. Die Wahrscheinlichkeit liegt 99:1 das der Fehler in deiner Datei liegt und nicht bei Expat.
Windows ist auch *sehr* verbreitet...
Du wirst wahrscheinlich nicht Unicode als Zeichensatz verwenden, also lautet die erste Zeile:
<?xml version="1.0" encoding="iso-8859-1"?>
öh, ja, kann sein, denn: Hab mir die gepostete Datei mal kurz angesehen und würde sagen, daß sie wellformed ist. (obwohl ich expat auch schon problemlos mit nicht-unicode text gefüttert habe [ohne encoding spezifikation])
Passende DTD:
<!ELEMENT Armyset (Army*)> <!ELEMENT Army EMPTY> <!ATTLIST Army Name CDATA #REQUIRED> <!ATTLIST Army Picture CDATA #REQUIRED> <!ATTLIST Army Production CDATA #REQUIRED> <!ATTLIST Army Production_cost CDATA #REQUIRED> <!ATTLIST Army Upkeep CDATA #REQUIRED> <!ATTLIST Army Strength CDATA #REQUIRED> <!ATTLIST Army Defense CDATA #REQUIRED> <!ATTLIST Army Hitpoints CDATA #REQUIRED> <!ATTLIST Army Moves CDATA #REQUIRED> <!ATTLIST Army Vitality CDATA #REQUIRED> <!ATTLIST Army Move_bonus CDATA #REQUIRED> <!ATTLIST Army Army_bonus CDATA #REQUIRED>
(ad hoc, aus der Hüfte, ungetestet)
Bin jetzt zu müde um den Code zu testen, vielleicht morgen...
Erstelle mal eine minimale Datei bei der der Fehler auftritt und schick sie hier her.
Hat er doch.
Happy Hacking!
Wir haben Gasheizung. Nein, keinen Kamin. Außerdem ist Sommer. Und ich geh jetzt ins Bett.
Gruß, Eric
p.s. Hat jemand Interesse an einem TYPENRADdrucker?
On Mon, Aug 27, 2001 at 05:23:47PM +0200, Ulf Lorenz wrote:
On Sun, Aug 26, 2001 at 10:36:06AM +0200, Thomas Guettler wrote:
On Sat, Aug 25, 2001 at 12:54:22PM +0200, Ulf Lorenz wrote:
Hallo allesamt,
ich hätte mal eine Frage zum Thema XML, da ich selber nur minimal Ahnung davon habe. Ich möchte ein XML file mit in etwa folgendem Inhalt parsen:
<Armyset> <Army Strength=8 Defense=5 ... /> <Army ... /> ... </Armyset>
Eine Möglichkeit warum das "malformed XML" sein könnte ist, weil du die Attribute nicht in Hochkomma hast.
also Strength="8" oder Strength='8'
Ups, hab ich in meinem Beispiel vergessen, die Attribute sind völlig korrekt (da hatte sich Qt am Anfang mal beschwert :)). Expat meckert schon bei der ersten Zeile.
Ähm, wenn mich nicht alles täuscht dürfen die Tags beim XML nur lowercase sein...
BTW mit DTD hat das alles nix zu tun, da expat die Datei nur auf Syntax überprüft nicht auf Inhalt.
Ciao, Tobias
On Tue, Aug 28, 2001 at 11:18:41AM +0200, Tobias Koenig wrote:
Ähm, wenn mich nicht alles täuscht dürfen die Tags beim XML nur lowercase sein...
Nein. Case-sensitive aber nicht zwingend lowercase (und zwar sowohl Elemente, als auch Attribute).
BTW mit DTD hat das alles nix zu tun, da expat die Datei nur auf Syntax überprüft nicht auf Inhalt.
Ja. Aber es ist trotzdem praktisch sich eine DTD zu bauen, um mittels eines XML-Browsers die Korrektheit prüfen zu können (z.B. sind alle Pflichtattribute vorhanden?).
Gruß, Eric
On Tue, Aug 28, 2001 at 12:53:29PM +0200, Eric Schaefer wrote:
On Tue, Aug 28, 2001 at 11:18:41AM +0200, Tobias Koenig wrote:
BTW mit DTD hat das alles nix zu tun, da expat die Datei nur auf Syntax überprüft nicht auf Inhalt.
Ja. Aber es ist trotzdem praktisch sich eine DTD zu bauen, um mittels eines XML-Browsers die Korrektheit prüfen zu können (z.B. sind alle Pflichtattribute vorhanden?).
Naja, ich finde die Syntax einfach genug, daß man das auch ohne XML-Browser und DTD hinbekommt, und die komplizierteren Beschreibungen sollen sich später sowieso hinter einer GUI verbergen.
Gruß, Eric
Ulf
lug-dd@mailman.schlittermann.de