2011-11-29 12 views
15

Con questo xml:XPath per trovare gli attributi in cui il nome inizia con un dato valore

<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> 

vogliamo trovare solo

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

che sono quei nodi che hanno un attributo in cui il nome di attributo inizia con val

risposta

13

Si può provare questo:

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

se si sa che si sta cercando per il primo attributo dell'elemento div.

Edit:

Siamo spiacenti, non si è reso conto che si voleva per selezionare gli elementi stessi. Si potrebbe utilizzare parent :: div o quello che hai fatto, ma il modo corretto di fare questo sarebbe per selezionare direttamente la div stessi:

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

ho bisogno di ottenere div elementi wich avere attributi specifici. Non attributi e i loro valori come in '// div/@ * [inizia con (nome (.), 'Val')]' – dom1nga

+0

usando ** nokogiri ** ho ottenuto: '"

a
". XPath ("// div/@ * [inizia-con (nome(), 'val').]") # => [# ]' – dom1nga

+0

funziona con '// div/@ * [inizia-con (nome (.), 'val')]/..' Great thx – dom1nga

0

hai provato con .../@ val *?

+0

'// * [@ val *]' ha sintassi non corretta '// * [ '@ val *']' restituire i risultati della ricerca sbagliati, contiene 'val' nei valori, ma non negli attributi – dom1nga

0

quali sono quei nodi che hanno un attributo in cui il nome di attributo inizia con val

Uso:

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

questo modo si seleziona ogni elemento div nel documento, che presenta almeno un attributo, il cui nome inizia con la stringa "val".

XSLT - basata verifica:

Questa trasformazione:

<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> 

quando applicato su questo documento XML (prodotta dal frammento XML fornito):

<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> 

seleziona ed emette i nodi desiderati:

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