Für eine andere Frage Ich habe einen XML-Code erstellt, der auf meinem Entwicklungscomputer funktioniert, aber nicht auf Viper-Codepads, wo ich Ich habe es getestet, bevor ich es meiner Antwort hinzugefügt habe.
Ich könnte mein Problem so weit reduzieren, dass sich die Reihenfolge der von DOMXPath::query()
zurückgegebenen Knoten zwischen meinem System und dem Codepad unterscheidet.
XML: <test>This is some <span>text</span>, fine.</test>
Wenn ich alle Textknoten //child::text()
abfrage, unterscheidet sich das Ergebnis:
Meine Maschine:
%Vor%Ich bin nicht so erfahren mit xpath, dass ich verstehe, warum das passiert und wie es möglich ist, die Reihenfolge der Rückgabe mit der PHP-Implementierung zu beeinflussen.
Bearbeiten:
Weitere Tests haben ergeben, dass sich LIBXML_VERSION
zwischen den beiden Systemen unterscheidet:
Ich könnte den folgenden Fehlerbericht finden, der wie folgt aussieht: Fehler 363252 - Proximity-Position in libxml2's xmlXPathEvalExpression ( ) berichtete am 18. Oktober 2006 und bestätigte, dass es seit Mai 2006 zurückgeht, was vor der fraglichen Version 2.6.26 liegt.
Dies sollte in libxml2 2.6.27 behoben worden sein.
Technisch gibt XPath 1.0 Knoten-Sets statt Knoten-Sequenzen zurück. In der XPath 1.0-Spezifikation gibt es keine Aussage über die Reihenfolge dieser Knoten-Sets - in der Tat, da sie Mengen sind, haben sie keine intrinsische Reihenfolge.
XSLT 1.0 verarbeitet jedoch immer die in XPath 1.0 zurückgegebenen Knotensätze in der Reihenfolge der Dokumente. Aufgrund dieses Präzedenzfalls wird weithin erwartet, dass XPath-Ergebnisse in der Dokumentreihenfolge angezeigt werden, wenn XPath aus anderen Sprachen als XSLT aufgerufen wird. Es gibt jedoch nichts in der Spezifikation, um dies zu garantieren. In XPath 2.0 wird die Benutzererwartung Teil der Spezifikation, und die Ergebnisse eines Pfadausdrucks MÜSSEN sich in der Reihenfolge der Dokumente befinden.
Es scheint, dass Viper Codepad nicht die ausgewählte text()
-Knoten in der Tiefe der ersten Dokumentenreihenfolge zurückgibt, sondern eine erste Breitenbewertung durchführt.
Es soll eine Tiefenüberquerung sein.
Saxon, MSXML, Altova XML haben die Ergebnisse jeweils in der Reihenfolge der Tiefe zurückgegeben.
Tags und Links php xpath domdocument libxml2