2016-10-06 1 views
0

Wenn ich diese XPath-Ausdruck auf Chrome Developer Tools' Konsole über google.com ausführen, bekam ich die gleichen ErgebnisseWas ist der Unterschied zwischen // und .// in XPath?

  • $x("(.//*[@id='gs_lc0'])")

  • $x("(//*[@id='gs_lc0'])")

Was die Verwendung von ist Punkt in XPath?

+0

Ein ** (//) ** ist ein absoluter Pfad und der andere ** (.//) ** ist ein relativer Pfad. Das ** (.//) ** wählt verschiedene Knotengruppen aus, wobei ** (.) ** bedeutet, dass es am aktuellen Knoten beginnt. Auf der anderen Seite wählt man mit ** (//) ** alle Elementknoten mit dem von Ihnen angegebenen Attribut. – Codexer

+0

Ich glaube nicht, so da ein absoluter Pfad /html/body/h1 beide sind relative Pfade –

+0

@PedroMachado mit/ so etwas wie ist bauen: Hat Ihre Frage [** beantwortet **] (http://stackoverflow.com/a/39903294/290085) zu Ihrer Zufriedenheit? – kjhughes

Antwort

1

In XPath, // und .// sind beide syntaktische Abkürzungen:

  • // kurz ist für /descendant-or-self::node()/
  • .// kurz ist für self::node()/descendant-or-self::node()/

Die descendant-or-self Achse enthält den Kontextknoten und alle Abkömmlinge des Kontextknotens. So ist der Unterschied zwischen // und .// reduziert auf einen Unterschied in Context-Knoten.

Für // ist der Kontextknoten der Stammknoten; // ist ein absolute location path.

Für .// hängt der Kontextknoten vom Kontext ab; .// ist ein relative location path. Bei der Bewertung auf oberster Ebene in der Google Developer Tools-Konsole ist der Kontextknoten der Stammknoten. Sie sehen also identische Ergebnisse.

Kurz:

  • Verwenden //, wenn Sie Knoten wünschen aus dem gesamten Dokument wählen.
  • Verwenden Sie .//, wenn Sie Knoten nur unterhalb des Kontextknotens auswählen möchten.
Verwandte Themen