2016-04-24 15 views
2

In diesem XPath-Ausdruck: //div[@id=”myID”]|p, wird der Operator // auf beide Seiten des Union-Operators angewendet? Oder würde dieser Ausdruck einfach alle div Elemente im Dokument zurückgeben, die einen id Attributwert von myID und alle p Elemente haben, die untergeordnete Elemente des Kontextknotens sind?Welche Priorität haben die Operatoren in XPath?

Gibt es eine Referenz für XPath-Operatorbindung und Assoziativität?

+0

beide Teile werden als unabhängige Xpathe ausgeführt. Sie müssen also '// p' schreiben. – splash58

Antwort

4

XPath Operator Bestellen Präzedenz

Der XPath EBNF grammar den folgenden Vorrang unter den Betreibern impliziert (niedrigsten zum höchsten):

enter image description here

Quelle: XML Path Language (XPath) 2.0 (Second Edition)

(Siehe auch : XML Path Language (XPath) 3.0)


Da // und [] höherer Priorität sind als | (Vereinigung), Ihre XPath-Ausdruck

//div[@id=”myID”]|p 

sagt

  • alle div Elemente im Dokument mit @id Attributwert auswählen gleich myID,
  • und wählen Sie alle p Elemente, die Kinder des Context-Elements sind,
  • und die Vereinigung dieser beiden Gruppen von Elementen nehmen

um das Endergebnis zu produzieren (wie Sie in Ihrer zweiten Interpretation erwartet).

+3

Um nur das hinzuzufügen, gibt es in XPath 1.0 keine solche Tabelle, aber die Präzedenz wird implizit durch die Grammatik definiert. Zum Beispiel die Produktionen [21] AdditiveExpr :: = MultiplikativeExpr (("+" | "-") MultiplikativeExpr) * 'und' [22] MultiplikativeExpr :: = UnionExpr ((* "| div" | idiv ") | "mod") UnionExpr) * 'sagen Sie uns, dass die Operanden von" + "einen" * "- oder" div "-Operator enthalten können, aber nicht umgekehrt. –

Verwandte Themen