2016-03-21 12 views
1

Kann jemand bitte erklären, was die folgenden Xpath Ausdrücke bedeuten?Xpath Expression Interpretation

  1. //node()[not(*)][not(normalize-space())]
  2. //node()[not(*)][not(normalize-space())][not(boolean(@Key))]
  3. //node()[not(text())]

I //node() verstehen bedeutet einen beliebigen Knoten, aber mit den folgenden Ausdrücken nicht sicher.

Antwort

4
//node()[not(*)][not(normalize-space())] 

Alle Elemente, Text, Kommentar und processing-instruction Knoten, beliebige Stelle im Dokument, das nicht über ein untergeordnetes Element Knoten und deren String-Wert ist entweder leer oder besteht nur aus Whitespace

//node()[not(*)][not(normalize-space())][not(boolean(@Key))] 

Wie oben, mit der zusätzlichen Bedingung, dass es kein @Key-Attribut gibt. Das letzte Prädikat ist schlecht geschrieben: es könnte auf [not(@Key)] verkürzt werden, ohne seine Bedeutung zu ändern.

//node()[not(text())] 

Alle Elemente, Text, Kommentar und processing-instruction Knoten, beliebige Stelle im Dokument, die kein Kind Textknoten haben.

+0

OK viel besser und genauer. –

0

Aktualisiert (dank @ Michael Kay Kommentar)
erste:
//node() alle Knoten im Dokument (einschließlich Text, Kommentar und Verarbeitungsanweisung aber keine Attribute)
[not(*)], die kein Kind hat Elementknoten
[not(normalize-space())] die keinen Textinhalt (neben Whitespace) hat.

Zweite ein: Gleiche wie erste, aber zusätzlich:

[not(boolean(@Key))] der Knoten hat kein Attribut Key Update: Für den dritt man einen Blick auf e.g. this In Ihrem Beispiel hat dies auch Knoten mit jedem ignorieren Textinhalt (auch Leerraum)

+0

und die dritte bitte? – yonan2236

+1

Keine ganz genaue Antwort. Zum Beispiel wählt '// node()' nicht alle Knoten im Dokument - es wählt nicht den Dokumentknoten aus und wählt keine Attribute und Namespaces aus; auch '[not (*)]' erlaubt untergeordnete Textknoten aber nicht untergeordnete Elementknoten. –