Dato questo XML, ciò che XPath restituisce tutti gli elementi il cui prop
attributo contiene Foo
(i primi tre nodi):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Dato questo XML, ciò che XPath restituisce tutti gli elementi il cui prop
attributo contiene Foo
(i primi tre nodi):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Risposte:
//a[contains(@prop,'Foo')]
Funziona se uso questo XML per ottenere risultati.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
Modifica: Un'altra cosa da notare è che mentre XPath sopra restituirà la risposta corretta per quel particolare xml, se vuoi garantire di ottenere solo gli elementi "a" nell'elemento "bla", dovresti come altri hanno già detto
/bla/a[contains(@prop,'Foo')]
Questo cercherà tutti gli elementi "a" nell'intero documento XML, indipendentemente dal fatto che siano nidificati in un elemento "blah"
//a[contains(@prop,'Foo')]
L'ho aggiunto per completezza e nello spirito di StackOverflow. :)
xmlme.com
ora reindirizza a qualche altro host e non sembra ospitare lo strumento o qualcosa di simile.
Questo XPath ti darà tutti i nodi che hanno attributi contenenti 'Foo' indipendentemente dal nome del nodo o dal nome dell'attributo:
//attribute::*[contains(., 'Foo')]/..
Naturalmente, se sei più interessato ai contenuti dell'attributo stesso e non necessariamente al loro nodo genitore, basta rilasciare il / ..
//attribute::*[contains(., 'Foo')]
//@*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
O:
/bla/a[contains(@prop,'Foo')]
O:
/bla/a[position() <= 3]
sezionato:
descendant-or-self::
L'Asse: cerca in ogni nodo sottostante e nel nodo stesso. Spesso è meglio dire questo che //. Ho riscontrato alcune implementazioni in cui // significa ovunque (decente o sé del nodo radice). L'altro utilizza l'asse predefinito.
* or /bla/a
Il tag - una corrispondenza jolly e / bla / a è un percorso assoluto.
[contains(@prop,'Foo')] or [position() <= 3]
La condizione all'interno di []. @prop è una scorciatoia per attributo :: prop, poiché l'attributo è un altro asse di ricerca. In alternativa puoi selezionare i primi 3 usando la funzione position ().
John C è il più vicino, ma XPath distingue tra maiuscole e minuscole, quindi XPath corretto sarebbe:
/bla/a[contains(@prop, 'Foo')]
Hai provato qualcosa del tipo:
// a [contiene (@prop, "Foo")]
Non ho mai usato la funzione contiene prima ma sospetto che dovrebbe funzionare come pubblicizzato ...
Se devi anche abbinare il contenuto del link stesso, usa text ():
//a[contains(@href,"/some_link")][text()="Click here"]
/ bla / a [contiene (@prop, "foo")]
prova questo:
// un [contiene (@ prop, 'pippo')]
che dovrebbe funzionare per qualsiasi tag "a" nel documento