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?
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
@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))]' –
@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 –