Unterschiede in Abfragealgorithmen zwischen XPath und CSS

9

Ich frage mich, warum jemand lieber CSS-Selektoren als XPath-Selektoren verwenden möchte oder umgekehrt, wenn er einen verwenden könnte. Ich denke, dass das Verständnis der Algorithmen, die die Sprachen verarbeiten, mein Wunder auflösen wird.

Es gibt jede Menge Dokumentation zu XPath- und CSS-Selektoren, aber ich habe nur wenige Vergleiche gefunden. Außerdem verwende ich CSS Selektoren nicht so sehr.

Hier ist, was ich über die Unterschiede gelesen habe. (Diese drei Referenzen diskutieren die Verwendung von XPath und CSS-Selektoren in Selenium, um HTML abzufragen, aber mein Wunder ist allgemein.)

Es sieht so aus, als wären CSS-Auswahlalgorithmen irgendwie für HTML optimiert, aber ich weiß nicht wie.

  1. Gibt es einen Vortrag darüber, wie CSS- und XPath-Abfragealgorithmen funktionieren und wie sie sich unterscheiden?
  2. Gibt es noch andere abstrakte Unterschiede zwischen den Sprachen, die mir fehlen?
Thomas Levine 15.11.2011, 18:03
quelle

1 Antwort

2

Der Hauptunterschied besteht darin, wie stabil die Dokumentenstruktur ist, auf die Sie abzielen:

  1. XPath ist eine gute Abfragesprache, wenn die Struktur von Bedeutung und / oder stabil ist. Normalerweise geben Sie den Pfad, die Bedingungen und den genauen Versatz an. Es ist auch eine gute Abfragesprache, um eine Menge ähnlicher Objekte abzurufen. Aus diesem Grund hat es eine enge Beziehung zu XQuery. Hier hat das Dokument eine stabile Struktur und Sie müssen wiederholte / ähnliche Abschnitte abrufen

  2. CSS-Selektoren eignen sich für bessere CSS-Stylesheets. Diese interessieren sich nicht für die Dokumentstruktur, da sich dies sehr ändert. Stellen Sie sich ein CSS-Stylesheet vor, das auf alle HTML-Seiten einer Website angewendet wird. Der Inhalt und die Struktur jeder Seite ist unterschiedlich. Hier sind CSS-Selektoren wegen dieser sich ändernden Struktur besser. Sie werden feststellen, dass der Zugriff eher tagbasiert ist. Die meisten CSS-Syntax spezifizieren eine Menge von Elementen, Attributen, ID, Klassen ... und nicht so sehr ihre Struktur. Hier müssen Sie Abschnitte finden, die innerhalb einer Dokumentstruktur keine eindeutige Position haben, aber mit bestimmten Attributen gekennzeichnet sind.

Update : Nach näherem Hinsehen zu Ihrer Frage wurde mir klar, dass Sie mehr an der aktuellen Implementierung interessiert sind, nicht an der Art der Abfragesprachen. In diesem Fall kann ich Ihnen nicht die Antwort geben, nach der Sie suchen. Ich kann nur annehmen, dass der Grund immer noch darin besteht, dass man mehr von der Struktur abhängig ist als die andere.

In XPath müssen Sie beispielsweise die Struktur des Dokuments, an dem Sie gerade arbeiten, verfolgen. Auf der anderen Seite werden CSS-Selektoren ausgelöst, wenn ein bestimmtes Tag angezeigt wird, und es spielt normalerweise keine Rolle, was vorher kam. Ich kann mir vorstellen, dass es viel einfacher ist, einen CSS-Selektoralgorithmus zu implementieren, der beim Lesen eines Dokuments funktioniert, während XPath mehr Fälle enthält, in denen Sie wirklich das vollständige Dokument und / oder eine strikte Verfolgung dessen benötigen, was es liest (weil der Verlauf und Hintergrund dessen, was Sie lesen, ist wichtiger)

Nun, nehmen Sie mich nicht zu ernst zu meinem Update. Ich rate nur hier, weil ich einige Hintergrundinformationen zum Parsen von Sprachen hatte, aber ich habe eigentlich keine Erfahrung mit denen, die für die Datenabfrage entwickelt wurden.

    
SystematicFrank 15.11.2011 20:28
quelle