我試圖用一個軟件名稱硒(網絡鼠)來模擬用戶與瀏覽器硒IDE 1.9.1的XPath與包含選擇
交互。例如,我試圖把用戶名字段名「約翰
然而, '用戶名文本框' 的 'ID' 是username_947232,username_8237
的格式username_ [隨機數]
我的語法如下:
//*[contains(@id="username_(/\d+/)")]
但它不工作,任何人有任何想法?
謝謝你的任何建議!
我試圖用一個軟件名稱硒(網絡鼠)來模擬用戶與瀏覽器硒IDE 1.9.1的XPath與包含選擇
交互。例如,我試圖把用戶名字段名「約翰
然而, '用戶名文本框' 的 'ID' 是username_947232,username_8237
的格式username_ [隨機數]
我的語法如下:
//*[contains(@id="username_(/\d+/)")]
但它不工作,任何人有任何想法?
謝謝你的任何建議!
使用:
//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
說明:
該表達選擇其id
屬性的字符串值與字符串開頭的任何元件和此字符串的其餘部分(在開始"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"/>
待辦事項:另外兩個這個問題的答案將選擇從所有5個user
元件上述文件 - 當然這是不正確的。
你應該能夠只使用
//*[contains(@id, 'username_')]
雖然這可能不是最優的,如果你有比在年底的數字以外的任何可能性。
使用starts-with
//*[starts-with(@id, "username_")]
+1,有趣的方式。雖然我猜這取決於他所需的複雜程度。 – Arran
@阿蘭,不客氣。此答案中的XPath表達式可以在任何複雜程度的XML文檔上正常工作。當'$ string'是一個整數的字符串表示形式時,'floor($ string)= $ string'的表達式就是'true()「。 –