User since
2003-08-18
142
Artikel
BenutzerIn
Ich benutze XML::Simple, um ein XML Dokumente zu parsen.
Dabei gibt es in dem Dokument Strukturen, die bei einem Dokument für den Tag X einmal und am Tag Y mehrfach auftreten.
Wie kann ich am einfachsten bei diesen Knoten erkennen, ob es sich um ein Array oder nur um ein Element handelt? Beim Umcasten auf ein Array gibt es einen Fehler.
Ich habe auch ForceArray versucht, damit wir nur leider mein XML viel tiefer und entsprechend wird das Lesen aufwendiger.
User since
2003-08-18
142
Artikel
BenutzerIn
Vielen Dank!
Ich muss mir trotzdem überlegen, was ich am cleversten mache, da ich das auf einigen Ebenen habe...Vielleicht wechsle ich doch den XML Parser...
User since
2003-08-07
2921
Artikel
BenutzerIn
[quote=weismat,31.01.2007, 16:42]Vielen Dank!
Ich muss mir trotzdem überlegen, was ich am cleversten mache, da ich das auf einigen Ebenen habe...Vielleicht wechsle ich doch den XML Parser...[/quote]
Erläutere doch einmal, was du mit deinen EBenen so meinst. Eventuell haben wir ja eine Idee wo der Hase begraben liegen könnte.
User since
2003-08-04
14371
Artikel
ModeratorIn
Und sage mal genauer, was Du machen möchtest. Vielleicht können wir Dir dann weiterhelfen...
User since
2003-11-28
3645
Artikel
ModeratorIn
Meine Erfahrung ist, dass man in den sauren Apfel beißen muss und sich XML nicht so einfach mit XML::Simple parsen lässt, sondern man viel Code schreiben muss, wenn man es "richtig" haben will. Mit XPath-Konstrukten (siehe XML::LibXML) lässt sich die ganze Sache etwas leichter ertragen. Generell würde ich empfehlen (wenn man die Möglichkeit hat), auf XML ganz zu verzichten und lieber JSON, YAML, Storable, Data::Dumper o.ä. zu verwenden.
User since
2003-08-18
142
Artikel
BenutzerIn
Ich bekomme Dateien aus einem fremden System, die auf XML basieren. Die Reports sind im Endeffekt immer noch Cobol-Datenstrukturen. D.h. man weiß ohne DTD nicht, ob es innerhalb der Struktur einen Unterstruktur gar nicht, einmal oder mehrfach gibt.
Erstmal habe ich mir damit beholfen an allen Stellen, wo es gar nicht, einmal oder mehrfach etwas gibt mit exit und ref zu arbeiten - nicht elegant - aber einfach und verständlich. Der Rest des Codes arbeitet dann immer mit Arrays, die kein, ein oder mehrere Elemente enthalten.
In den DTDs gibt es Definition mit minOccurs="0" oder minOccurs="1" und maxOccurs=1 oder maxOccurs="unbounded".
Mit Ebenen meine ich Wiederholgruppen.\n\n
<!--EDIT|weismat|1170758590-->
User since
2003-08-18
142
Artikel
BenutzerIn
Ich werde mal XML::Smart ausprobieren - das scheint, daß so zu machen, wie ich das brauche...werde posten, nachdem ich es mal ausprobiert habe...
User since
2003-11-28
3645
Artikel
ModeratorIn
Da bin ich gespannt. Ich habe in der Distribution XML::Smart::DTD entdeckt und gehofft, dass da jemand endlich das implementiert hat, was ich schon immer haben wollte: automatisches Serialisieren und Deserialisieren zwischen XML und Perl-Datenstrukturen mithilfe einer DTD oder eines anderen XML-Schemas. Leider scheint es das doch nicht zu sein.
Egal, ich benutze mittlerweile nur noch YAML, JSON, Bencode & Co. :-)
User since
2003-08-18
142
Artikel
BenutzerIn
Wie ich die Doku verstehe, ist das XML::Smart nur für die Ausgabe, nicht aber für das Parsen gedacht - werde wahrscheinlich doch bei XML-Simple bleiben...