Die ursprüngliche Frage ist unten, aber ich habe den Titel geändert, weil ich denke, dass es leichter wird, andere mit denselben Zweifeln zu finden. Am Ende ist ein XHTML-Dokument ein XML-Dokument.
Es ist eine Anfängerfrage, aber ich würde gerne wissen, welche Ihrer Meinung nach die beste Bibliothek zum Parsen von XHTML-Dokumenten in PHP5 ist?
Ich habe das XHTML aus HTML-Dateien (die mit Word erstellt wurden) mit Tidy erzeugt und weiß, dass ich einige Elemente von ihnen ersetzen muss (wie das Element und, ersetze einige Attribute in
)Tags).
Ich habe XML nicht sehr oft verwendet, es scheint viele Optionen für das Parsen in PHP zu geben (einfaches XML, DOM, usw.) und ich weiß nicht, ob alle von ihnen das tun können, was ich brauche, und das ist es der einfachste zu verwenden.
Sorry für mein Englisch, ich bin aus Argentinien. Danke!
Ich habe noch mehr Informationen: Ich habe viele HTML-Seiten in Word 97. Ich habe Tidy zum Reinigen und Drehen in XHTML Strict verwendet, jetzt sind sie alle XML-kompatibel. Ich möchte einen XML-Parser verwenden, um einige Elemente zu finden und sie zu ersetzen (die Logik, mit der ich das mache, spielt keine Rolle). Ich möchte beispielsweise, dass alle Seiten das gleiche CSS-Stylesheet und dieselben Klassenattribute verwenden, um eine einheitliche Darstellung zu erzielen. Sie sind alle statische Seiten, die legale Dokumente enthalten, nichts Seltsames. Welche der Erweiterungen sollte ich verwenden? Ist SimpleXML genug? Sollte ich DOM lernen, obwohl es schwieriger ist?
Nur um die Verwirrung hier zu klären. PHP hat eine Reihe von XML-Bibliotheken, da php4 keine sehr guten Optionen in dieser Richtung hatte. Ab PHP5 haben Sie die Wahl zwischen SimpleXml , DOM und der sax Expat-Parser . Letzteres gab es auch in php4. php4 hatte auch eine DOM-Erweiterung, die nicht ist wie php5.
DOM und SimpleXml sind Alternativen zur gleichen Problemdomäne; Sie laden das Dokument in den Speicher und lassen es als Baumstruktur darauf zugreifen. DOM ist eine ziemlich sperrige API, aber es ist auch sehr konsistent und es ist in vielen Sprachen implementiert, was bedeutet, dass Sie Ihr Wissen in verschiedenen Sprachen wiederverwenden können (zB in Javascript). SimpleXml könnte anfangs einfacher sein.
Der SAX-Parser ist ein anderes Biest. Es behandelt ein XML-Dokument als einen Strom von Tags. Dies ist nützlich, wenn Sie mit sehr großen Dokumenten arbeiten, da Sie nicht alles im Speicher halten müssen.
Für Ihre Verwendung würde ich wahrscheinlich die DOM-API verwenden.
Sie könnten SimpleXML verwenden, das in einer Standard-PHP-Installation enthalten ist. Diese Erweiterung bietet einfachen objektorientierten Zugriff auf XML-Strukturen.
Es gibt auch DOM XML . Ein "Nachteil" dieser Erweiterung ist, dass sie etwas schwieriger zu verwenden ist und standardmäßig nicht enthalten ist.
DOM ist eine standardisierte, sprachunabhängige API für hierarchische Daten wie XML, die vom W3C standardisiert wurde. Es ist eine reichhaltige API mit viel Funktionalität. Es basiert auf Objekten, da jeder Knoten ein Objekt ist.
DOM ist gut, wenn Sie nicht nur lesen oder schreiben wollen, sondern auch eine Menge von Knoten bearbeiten wollen, zB ein Knoten einfügen, die Struktur ändern usw.
SimpleXML ist eine PHP-spezifische API, die ebenfalls objektbasiert ist, aber viel weniger "knapp" sein soll als das DOM: einfache Aufgaben wie das Auffinden des Wertes eines Knotens oder Suchens Seine Kindelemente benötigen viel weniger Code. Seine API ist nicht so reichhaltig wie DOM, enthält aber immer noch Funktionen wie XPath-Lookups und eine grundlegende Fähigkeit, mit Dokumenten mit mehreren Namespaces zu arbeiten. Und, noch wichtiger, es behält alle Funktionen Ihres Dokuments wie XML-CDATA-Abschnitte und Kommentare bei, obwohl es keine Funktionen zu deren Manipulation enthält.
SimpleXML eignet sich sehr gut für schreibgeschützte Anwendungen: Wenn Sie lediglich das XML-Dokument lesen und in ein anderes Formular konvertieren möchten, sparen Sie viel Code. Es ist auch ziemlich gut, wenn Sie ein Dokument generieren oder grundlegende Manipulationen wie das Hinzufügen oder Ändern von untergeordneten Elementen oder Attributen vornehmen möchten, aber es kann kompliziert (aber nicht unmöglich) werden, eine große Menge an vorhandenen Dokumenten zu bearbeiten. Es ist nicht einfach, beispielsweise ein Kindelement zwischen zwei anderen hinzuzufügen; addChild fügt nur nach anderen Elementen ein. SimpleXML kann auch keine XSLT-Transformationen ausführen. Es hat keine Dinge wie 'getElementsByTagName' oder getElementById ', aber wenn Sie XPath kennen, können Sie immer noch so etwas mit SimpleXML machen.
Das SimpleXMLElement-Objekt ist etwas "magisch". Die Eigenschaften, die verfügbar gemacht werden, wenn Sie var_dump / printr / var_export nicht der vollständigen internen Repräsentation entsprechen. Einige der untergeordneten Elemente werden so angezeigt, als wären sie Eigenschaften, auf die mit der Option - & gt; Operator, aber behält immer noch das gesamte Dokument intern, und Sie können Dinge tun wie Zugriff auf ein Kindelement, dessen Name ein reserviertes Wort mit dem Operator [] ist, als ob es ein assoziatives Array wäre.
Sie müssen sich nicht vollständig auf das eine oder das andere festlegen, da PHP die Funktionen implementiert:
Dies ist hilfreich, wenn Sie SimpleXML verwenden und mit Code arbeiten müssen, der einen DOM-Knoten erwartet oder umgekehrt.
PHP bietet auch eine dritte XML-Bibliothek an:
XML Parser (eine Implementierung von SAX , einer sprachunabhängigen Schnittstelle, die im Handbuch nicht mit diesem Namen bezeichnet wird) ist jedoch eine viel tiefere Bibliothek dient einem ganz anderen Zweck. Es baut keine Objekte für dich. Es vereinfacht im Grunde genommen nur das Schreiben eines eigenen XML-Parsers, da es die Aufgabe übernimmt, zum nächsten Token vorzustoßen und den Typ des Tokens herauszufinden, beispielsweise den Tagnamen und ob es sich um ein öffnendes oder schließendes Tag handelt . Dann müssen Sie Callbacks schreiben, die jedes Mal ausgeführt werden sollten, wenn ein Token gefunden wird. Alle Aufgaben wie das Darstellen des Dokuments als Objekte / Arrays in einer Struktur, das Bearbeiten des Dokuments usw. müssen separat implementiert werden, da Sie mit dem XML-Parser nur einen Low-Level-Parser schreiben können.
Die XML-Parser-Funktionen sind immer noch sehr hilfreich, wenn Sie bestimmte Speicher- oder Geschwindigkeitsanforderungen haben. Damit ist es möglich, einen Parser zu schreiben, der ein sehr langes XML-Dokument parsen kann, ohne alle Inhalte gleichzeitig im Speicher zu halten. Wenn Sie nicht an allen Daten interessiert sind und nicht möchten, dass sie in einen Baum oder eine Gruppe von PHP-Objekten eingefügt werden, kann es auch schneller gehen. Zum Beispiel, wenn Sie durch ein XHTML-Dokument scannen und alle Links finden möchten und Sie sich nicht um die Struktur kümmern.
Ich bevorzuge SimpleXMLElement , da es ziemlich einfach ist, Elemente zu durchsuchen.
>Edit: Es steht zwar keine Versionsinfo zur Verfügung, aber es ist in PHP5 verfügbar, mindestens 5.2.5, aber wahrscheinlich früher.
Es ist wirklich eine persönliche Entscheidung, aber es gibt viele XML-Erweiterungen .
Denken Sie daran, dass viele XML-Parser nicht funktionieren, wenn Sie ein ungültiges Markup haben - XHTML sollte XML sein, aber nicht immer!
Es ist lange her (2 Jahre oder länger), seit ich mit XML in PHP geparst habe, aber ich hatte immer gute, brauchbare Ergebnisse von XML_Parser Pear-Paket . Nachdem ich das gesagt habe, war ich nur minimal mit PHP5 beschäftigt, daher weiß ich nicht wirklich, ob es heutzutage bessere, eingebaute Alternativen gibt.
Ich habe letztes Jahr ein bisschen XML in PHP5 analysiert und mich für eine Kombination von SimpleXML entschieden.
DOM ist etwas nützlicher, wenn Sie eine neue XML-Struktur erstellen oder zu einer vorhandenen hinzufügen möchten, die etwas flexibler ist.
Es hängt wirklich davon ab, was Sie erreichen wollen. Für das Ziehen ziemlich großer Mengen von Daten, I.E. viele Datensätze von sagen, Produktinformationen von einer Ladenwebsite, würde ich wahrscheinlich Expat verwenden, da es angeblich ein bisschen schneller ist ... Persönlich habe ich XMLs groß genug, um einen spürbaren Leistungsschub zu erzeugen. Bei diesen Mengen können Sie auch SQL verwenden.
Ich empfehle die Verwendung von SimpleXML. Es ist ziemlich intuitiv, einfach zu benutzen / zu schreiben. Funktioniert auch gut mit XPath.
DOM hat nie wirklich viel zu tun, aber wenn Sie den XML-Parser für etwas verwenden, das so groß ist, wie Sie es beschreiben, möchten Sie es vielleicht verwenden, da es etwas funktionaler ist als SimpleXML.
Sie können über alle drei an W3C Schulen lesen: