2016-08-08 43 views
1

Ich versuche zu finden, dass alle DIV-Elemente das Attribut widget-name und ein nachkommendes span-Tag haben, die ein Titelattribut haben.Was ist die richtige Art, Nachkommen in XPath zu verwenden

Dies ist, was ich versuche.

Dies scheint fast zu funktionieren, aber es fehlt ein Element in der Nodes-Sammlung, die es zurückgibt.

Antwort

0

Macht nichts. Diese

ist das, was ich brauchte:

//div[@widget-name and descendant::span[@class='title']] 

OK - nehmen Sie es zurück. Dies ist nicht die vollständige Antwort. Ich versuche jetzt, dies zu optimieren, wo es gibt alle außer den Titel zu einem Text nicht gleich ist:

//div[@widget-name and descendant::span[@class='title' and [text()[contains(., '{someTextToKeep}' 

Jeder sehen, warum diese ungültig XPath sein würden?

Schluss Antwort lautet:

//div[@widget-name and descendant::span[@class='title' and text()[not(contains(., 'someTextToKeep'))]]]" 
+0

Sieht gut aus, aber man könnte vereinfachen 'text() [nicht (. Enthält ('someTextToKeep'))]' auf 'nicht (enthält (, 'someTextToKeep')) ' –

0

Dieser XPath zurückkehren sollten alle div ‚s, dass:

  • hat ein widget-name Attribut
  • ein Nachkomme span Element (verwendet abbreviated syntax), dass:
    • hat eine class Attribut mit dem Wert 'title'
    • enthält den Text 'someTextToKeep' (Wenn Sie Spannen mit bestimmtem Text ausschließen möchten, geben Sie in not() ein.

XPath.

//div[@widget-name and .//span[@class='title'][contains(.,'someTextToKeep')]]