2010-11-11 60 views
22

我正在查找匹配特定模式的元素的所有屬性。查找以特定模式開頭的屬性名稱

因此,對於一個元素

<element s2="1" name="aaaa" id="1" /> 
<element s3="1" name="aaaa" id="2" /> 

我希望能夠找到這樣開始的所有屬性的「(返回的S1的第一個元素和值值S3的第二個元素)。

如果這不在xpath的能力範圍內,請讓我知道。

回答

35

使用更好:

element/@*[starts-with(name(), 's')] 

此XPath表達式選擇其名稱以字符串's'啓動所有屬性附加傷害節點被命名element元素的屬性這是當前節點的子節點。

starts-with()是XPath 1.0中

+0

非常感謝回覆,這也是一個很好的答案。 – Dunderklumpen 2010-11-11 05:17:43

+0

像廣告一樣工作,並幫助我得到原始答案的工作。 – Dunderklumpen 2010-11-11 05:28:19

+0

這正是我一直在尋找的!感謝您的問題和答案。 :) – ParagJ 2013-05-28 11:34:43

3
element/@*[substring(name(), 1,1) = "s"] 

將匹配以's'開頭的任何屬性。

功能starts-with()可能看起來比使用substring()

+0

Hmmm在XMLSpy中使用它,這是我的Xpath應用程序我收到一個錯誤「Unexpected token - 」[substring(name(),1,1)=「。 – Dunderklumpen 2010-11-11 01:38:03

+0

這絕對看起來像我需要這麼多謝謝答案的方法。 – Dunderklumpen 2010-11-11 02:58:45

+0

感謝Dimitrie下面的子字符串模式也起作用元素/ @ * [substring(name(),1,1)='s'] – Dunderklumpen 2010-11-11 05:25:38

0

的標準功能我已經從兩個@ Dimitre-Novatchev@Ledhund測試給定的答案,在使用lxml.html模塊的Python

兩個element/@*[starts-with(name(), 's')]element/@*[substring(name(), 1,1) = "s"]只返回S2S3。您將無法知道哪個值屬於哪個屬性。

我認爲在實踐中我會更感興趣的是找到包含以特定字符開頭的名稱而不僅僅是它們的值的元素本身。

爲了實現這一目標很簡單,只是在末尾添加/..

element/@*[starts-with(name(), "s")]/..

element/@*[starts-with(name(), "s")]/parent::*

element/@*[starts-with(name(), "s")]/parent::node()

相關問題