使用:
//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
説明:
この式は、id
属性の文字列値が文字列で始まり、"username_"
この文字列の残りの部分 (開始の の後"username_"
) が整数である要素を選択します。
$string
ここでは、 が整数を表す場合にのみ、次の式が真であるという事実を使用します。
floor($string) = $string
XSLT ベースの検証:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
"/>
</xsl:template>
</xsl:stylesheet>
この変換がこの XML ドキュメントに適用されると、次のようになります。
<t>
<user id="username_Xyz"/>
<user id="username_Xyz123"/>
<user id="username_123Xyz"/>
<user id="username_123Xyz456"/>
<user id="username_2015"/>
</t>
Xpath 式が評価され、この評価から選択されたノードが出力にコピーされます。
<user id="username_2015"/>
注: この質問に対する他の 2 つの回答でuser
は、上記のドキュメントの 5 つの要素すべてが選択されますが、これはもちろん正しくありません。