非常简单,有一个HTML文件,并且有一个像这样的变量id的div
<div id="abc_1"><div>
id的整数部分是可变的,因此它可以是abc_892,abc_553 ...等
获得它的最佳查询是什么?
答案 0 :(得分:6)
//div[starts-with(@id, "abc_")]
答案 1 :(得分:2)
当前接受的答案会选择以下不需要的元素:
<div id="abc_xyz"/>
但是只能接受这样的div
元素,其id
不仅以"abc_"
开头,而_
后面的子字符串也是整数的表示。
使用此XPath表达式:
//div
[@id[starts-with(., 'abc_')
and
floor(substring-after(.,'_'))
=
number(substring-after(.,'_'))
]
]
这将选择具有div
属性的任何id
元素,其字符串值以字符串"abc_"
开头,而-
之后的子字符串是整数的有效表示形式
<强>解释强>:
这里我们使用的事实是在XPath 1.0中这个XPath表达式:
floor($x) = number($x)
在true()
为整数时确切地评估为$x
。
这很容易证明:
如果$x
是一个整数,则上述表达式的定义为true()
。
如果上面的表达式求值为true()
,这意味着等式的两边都不是NaN
,因为根据定义NaN
不等于任何价值(包括自身)。但这意味着$x
是一个数字(number($x)
不是NaN
),根据定义,等于整数$x
的数字floor($x)
是整数。
替代解决方案:
//div
[@id[starts-with(., 'abc_')
and
'abc_' = translate(., '0123456789', '')
]
]