文字列で始まり数字で終わる要素をループして見つけたいのですが、どうすればよいかわかりません。 ends-with()
ここにこのコードがあります
*[starts-with(name(), "cup") and ends-with(name(), "_number")]
ps:アプリケーションが使用しているxpathのバージョンがわからない
回答:
回答№1は1XPath 2.0
これはXPath 2.0では簡単なことです。
//*[matches(name(), "^cup.*d$")]
名前がで始まるすべての要素を選択します cup
要求に応じて数字で終わります。
XPath 1.0
XPath 1.0には正規表現がないので、 ends-with()
と、文字列が数字かどうかをテストする機能は、XPath 1.0では要求がより複雑になります。これが一つの可能な解決策です:
//*[starts-with(name(), "cup")
and number(substring(name(),string-length(name())))
= number(substring(name(),string-length(name())))]
2番目の節は テストするDimitre Novatchevによる賢い方法 XPath 1.0では、文字列が数値かどうか.
これがXPath 1.0で数字で終わることを確認するためのより短い方法です:
//*[starts-with(name(), "cup")
and not(translate(substring(name(),string-length(name())), "0123456789", ""))]
回答№2の場合は1
私は信じている ends-with
Xpath 1.0にはありません。少なくともXPath 2.0を使用している必要があります。 matches()
文字列と末尾の数字を照合するには、次のようにします。
matches(name(), ".*d+$")
`xpathは次のようになります。
*[starts-with(name(), "cup") and matches(name(), ".*d+$")]
あるいは@kjhughesが彼の答えで述べたように:
*[matches(name(), "^cup.*d+$")]