很简单,有一个HTML文件,其中有一个带有变量id的div元素,如下所示。
<div id="abc_1"><div>
id的整数部分是可变的,因此它可以是abc_892、abc_553等等。
什么是获取该值的最佳查询方法?
//div[starts-with(@id, "abc_")]
目前被接受的答案选择了这些不需要的元素:
<div id="abc_xyz"/>
但只有那些div
元素必须被接受,其id
不仅以"abc_"
开头,而且下划线后面的子字符串是整数的表示形式。
使用此XPath表达式:
//div
[@id[starts-with(., 'abc_')
and
floor(substring-after(.,'_'))
=
number(substring-after(.,'_'))
]
]
这个选择器会选中任何带有id
属性的div
元素,其字符串值以"abc_"
开头,并且-
后面的子字符串是一个整数。
解释:
在XPath 1.0中,我们利用了这个XPath表达式:
floor($x) = number($x)
当$x
为整数时,表达式的值为true()
。
这可以很容易地证明:
如果$x
是整数,则根据定义,上述表达式的值为true()
。
如果上述表达式的值为true()
,则意味着等式两边都不是NaN
,因为根据定义,NaN
不等于任何值(包括它自己)。但这意味着$x
是一个数字(number($x)
不是NaN
),并且根据定义,一个等于整数floor($x)
的数字$x
是整数。
另一种解决方案:
//div
[@id[starts-with(., 'abc_')
and
'abc_' = translate(., '0123456789', '')
]
]
null = null
总是false)一样?谢谢。 - goat//div[@id[translate(.,'0123456789','') = 'abc_']]
不会更快吗? - Flynn1179floor($x) = $x
,因为这更易读、易懂,并且可以很好地转化为“类型检查”。 - Dimitre Novatchev