2017-06-29 3 views
4

existiert ich eine Webseite mit drei <input> Elementen aufweisen, die alle das gleiche name Attribut haben. Im Idealfall möchte ich das zweite dieser Elemente auswählen, mit der Ausnahme, dass nur ein Element auf der Seite vorhanden ist und ich stattdessen dieses Element auswählen möchte.XPath zweites Element viele wählen, es sei denn nur ein

Im Idealfall würde Ich mag so etwas wie (Pseudo-Code seit max existiert nicht)

(//input[@name='myname'])[max(1, last()-1)] 

Ich dachte, dass ich vielleicht etwas wie das folgende tun könnte, außer es alle drei Elemente

(//input[@name='myname'])[last()-1 or 1] 
ergibt

Was ist der beste Weg, dies mit XPath zu erreichen?

Antwort

2

Vielleicht greifen beide und dann nur die letzte.

Wenn es zwei oder mehr, wird es die zweite. Wenn es nur einen gibt, greift es diesen.

((//input[@name='myname'])[position()=1 or position()=2])[last()] 
+0

Vielen Dank! Das sieht so aus, als müsste es funktionieren. Ich glaube, ich habe nicht verstanden, dass ich 'position()' anstatt nur '[1 oder 2]' verwenden musste. Ich dachte, dass eine ganze Zahl implizit als 'position() = N' behandelt wird. – Suever

+0

@Suever - Gern geschehen. Außerdem würde Ihr erster XPath funktionieren, wenn Sie XPath 2.0 verwenden und eine Sequenz an ['max()'] übergeben könnten (https://www.w3.org/TR/2010/REC-xpath-functions-20101214/ # func-max) ... '(// input [@ name = 'meinname']) [max ((1, last() - 1))]' –

+0

@Suever: eine Ganzzahl N wird nur als (Position() = N) wenn das gesamte Prädikat eine ganze Zahl ist. Aber in 2.0 kannst du '[position() = 1 zu 2]' schreiben. Und in 1.0 kannst du '[position() < = 2]' schreiben –

Verwandte Themen