2011-11-29 35 views
15

與該XML開始:XPath查找屬性其中名稱與給定值

<div val1="q">a</div> 
<div val2="w">b</div> 
<div val3="e">c</div> 
<div some="r">d</div> 
<div thing="t">f</div> 
<div name="y">g</div> 
我們想找到只

<div val1="q">a</div> 
<div val2="w">b</div> 
<div val3="e">c</div> 

,它們是具有屬性的節點

其中屬性val開頭

回答

13

你可以試試這個:

//div/@*[starts-with(name(.), 'val')] 

如果你知道你正在尋找的div元素的第一個屬性。

編輯:

對不起不知道你想選擇的元素本身。你可以使用父::股利或你做了什麼,但這樣做的正確方法是直接選擇div自己:

//div[@*[starts-with(name(), 'val')]] 
+1

我需要獲取具有特定屬性的div元素。 沒有屬性和它們的值是 '// DIV/@ * [開始-與(名稱(), 'VAL'。)使用' – dom1nga

+0

** **引入nokogiri我得到: ' 「

a
」。 xpath(「// div/@ * [starts-with(name(。),'val')]」)#=> [#]' – dom1nga

+0

它適用於'// div/@ * [starts-with(name(。),'val')]/..' Great thx – dom1nga

0

您是否嘗試過....../@ val *?

+0

'// * [@ * VAL]'有不正確的語法 '// * [@ * VAL']'返回錯誤的搜索結果中,含有 'VAL' 人們的價值觀,而不是在屬性 – dom1nga

0

它是具有一個屬性在屬性名 開始這些節點與val

使用

//div[@*[starts-with(name(), 'val')]] 

這將選擇該文檔中的任何div元素至少包含一個屬性,其名稱以字符串"val"開頭。

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="//div[@*[starts-with(name(), 'val')]]"/> 
</xsl:template> 
</xsl:stylesheet> 

當此XML文檔(從所提供的XML片段生產)上施加:

<html> 
    <div val1="q">a</div> 
    <div val2="w">b</div> 
    <div val3="e">c</div> 
    <div some="r">d</div> 
    <div thing="t">f</div> 
    <div name="y">g</div> 
</html> 

選擇並輸出想要的節點:

<div val1="q">a</div> 
<div val2="w">b</div> 
<div val3="e">c</div> 
相關問題