On Fri, 10 Jun 2022 10:50:55 Karl Pflästerer wrote:
>
Stefan...@Froehlich.Priv.at (Stefan Froehlich) writes:
>> On Tue, 07 Jun 2022 13:16:50 Stefan Froehlich wrote:
>>> On Tue, 07 Jun 2022 12:19:59 Karl Pflästerer wrote:
>>>> Mit
https://www.php.net/manual/en/class.xmlreader.php bearbeiten
>>>> wir auch sehr große XML Dokumente; diese Klasse ist deutlich
>>>> speicherschonender. Der Ansatz ist (IMHO) schöner als SAX. das
>>>> wäre dann mein nächster Vorschlag:
>>>>
https://www.php.net/manual/en/book.xml.php
>>> Merci, da wird sich hoffentlich etwas machen lassen; ich brauche
>>> es ja auch nur für die Formaterkennung, die Verarbeitung so
>>> großer Files erfolgt dann eh durch eigene CLI-Programme, mit PHP
>>> würde das ewig und ein Jahr dauern.
>> War dann gar nicht einmal so kompliziert, danke. Ein komplettes
>> Dokument möchte ich damit nicht parsen müssen, dafür ist es mir
>> zu rustikal; zur Formaterkennung reicht es aber ganz
>> ausgezeichnet.
> Da sieht man, wie sich die Geschmäcker unterscheiden. Bei DOM
> stellen sich mir immer die Nackenhaare auf; es ist für meinen
> Geschmack zu javaesque.
Ich mag Java überhaupt nicht, aber DOM ist für den einen oder
anderen Standard sehr praktisch. Ich habe da z.B. einen, wo in einem
Element via XPath auf den eigentlichen Inhalt referenziert wird.
Dafür, dass das so ist, kann ich nichts, aber mit DOM ist das
(naheliegenderweise) sehr einfach gelöst. Zu Fuß? Ich weiss nicht.
Ich habe mit vielen, unterschiedlichen Formaten zu tun und mir im
Lauf der letzten zwei Jahre eine (noch längst nicht fertig
ausgerollte) Mapping-Engine geschrieben. Da kann ich dann (bei
kleineren Dateien, als die, um die es in diesem Thread ging) für ein
Format Dinge tun wie:
#v+
# basispfade
$responseInfo = '/opentrans:ORDERRESPONSE/opentrans:ORDERRESPONSE_HEADER/opentrans:ORDERRESPONSE_INFO/';
# mapping
$mapping = [
OrderResponse::FIELD_ORDER_NUMBER => $responseInfo . 'opentrans:ORDER_ID',
OrderResponse::FIELD_ALT_ORDER_NUMBER => $responseInfo . 'opentrans:ALT_CUSTOMER_ORDER_ID',
OrderResponse::FIELD_SUPPLIER_ORDER_NUMBER => $responseInfo . 'opentrans:SUPPLIER_ORDER_ID',
[...]
];
#v-
Dieses Mapping stecke ich dann gemeinsam mit der Definition der
zugehörigen Eingabefelder und dem (in diesem Fall XML-) Dokument in
eine verarbeitende Klasse und erhalte die fix-fertigen Datenwerte
als Ergebnis, inklusive Prüfung und ggf. Fehlermeldungen. Mit DOM
ist das dank XPath halbwegs einfach (wenn auch bei komplexeren
Strukturen natürlich nicht halb so übersichtlich, wie in den obigen
paar Zeilen), mit xmlreader sähe ich ad hoc keinen guten Zugang.
Da kann ich auf zwei Arten darauf antworten:
a) ich habe die Standards nicht erfunden, sondern muss damit
arbeiten. Das ist zwar korrekt, allerdings ein bisschen feig, denn
ich mag XML ja. Daher
b) Overhead und Ressourcenverbrauch sind mir (leider mit Grenzen,
wie dieser Thread gezeigt hat) weitgehend egal, ich muss zum einen
sehr einfach korrekte Dokumente erzeugen können und, wichtiger noch,
sehr einfach fehlerhafte Dokumente korrigieren können, um sie
anschließend zu verarbeiten.
Ich bekomme andauernd XML-Dokumente, die Feher enthalten - weniger
im XML selber (auch das gibt's), sondern vor allem in den Nutzdaten.
Ungültige Codes, verletzte Längenbeschränkungen und Randbedingungen,
oder Fehler auf einer sehr hohen Ebene (Rechnungen, die auf falsche
Bestellungen Bezug nehmen etc). Mit XML kann ich die Datei in einem
Texteditor aufmachen, trivial korrigieren und danach verarbeiten; im
Anschluss gibt es einen Rüffel per Mail, der in der Regel wenig bis
gar nichts bewirkt. Mit anderen Datenformaten (die bekomme ich ja
auch) ist das ungleich komplizierter, sowohl was meine Analyse
betrifft, als auch schon überhaupt die Korrektur durch den
Ersteller. Da können all die Kritikpunkte noch so zutreffen; viele
davon sind (aus meiner Sicht) lediglich Feinheiten, während der
zentrale Vorteil von XML einfach unübertroffen ist.
Auch bei der oben genannten Mapping-Engine ist z.B. die abstrakte
Formulierung der Position eines Datums in EDIFACT ungleich
komplexer als in jedem mir bekannten XML-Standard mit Ausnahme von
IDOC, das aber eher als Persiflage von XML zu betrachten ist.
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike
Schlau? Schlauer als Stefan!? Glaube und Teste!
(Sloganizer)