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(.,'_'))
]
]
これにより、文字列値が文字列で始まり、後の部分文字列が整数の有効な表現である属性をdiv
持つ要素が選択されます。id
"abc_"
-
説明:
ここでは、XPath1.0でこのXPath式が次のようになっているという事実を使用しています。
floor($x) = number($x)
が整数のtrue()
場合に正確に評価されます。$x
これは簡単に証明できます。
$x
が整数の場合、上記の式はtrue()
定義上評価されます。
上記の式がと評価された場合、これは、定義上、(それ自体を含む)どの値にも等しくないためtrue()
、等式の両側がどちらでもないことを意味します。しかし、これはそれが数(isnt )であることを意味し、定義上、整数に等しい数は整数です。NaN
NaN
$x
number($x)
NaN
$x
floor($x)
代替ソリューション:
//div
[@id[starts-with(., 'abc_')
and
'abc_' = translate(., '0123456789', '')
]
]