2011-09-13 34 views
8

puedo buscar una cadena específica contenida en un atributosi utilizo el siguiente XPath /xs:schema/node()/descendant::node()[starts-with(@my-specific-attribute-name-here, 'my-search-string')]Xpath para buscar un nodo que tenga CUALQUIER atributo que contenga una cadena específica?

Sin embargo, me gustaría buscar cualquier atributo que contiene una cadena *

+0

Usted necesita estar claro qué quiere decir con "que contiene". ¿Quiere decir "igual a" o "tener una subcadena igual a"? O, como sugiere su ejemplo, "comenzando con"? –

+0

* que tiene una subcadena igual a – emdog4

Respuesta

11
XML

muestra:

<root> 
    <element1 a="hello" b="world"/> 
    <element2 c="world" d="hello"/> 
    <element3 e="world" f="world"/> 
</root> 

Supongamos que necesitamos seleccionar elementos que tengan cualquier atributo que contenga h. En esta muestra: element1, element2. Podemos utilizar este XPath:

//*[@*[starts-with(., 'h')]] 

En su muestra:

/xs:schema/node()/descendant::node() 
    [@*[starts-with(@my-specific-attribute-name-here, 'my-search-string')]] 
+0

Es '// * [@ * [starts-with (., 'H')]]' lo mismo que '// * [starts-with (@ *, 'h')] ¿? – Eric

+1

@Eric, Nope. En el segundo nodo XPath, el conjunto pasa a la función 'starts-with' como primer argumento (' @ * '). La función 'starts-with 'convierte un conjunto de nodos en una cadena al devolver el valor de cadena del primer nodo en el conjunto de nodos, es decir, solo el primer atributo. –

+1

ah, eso tiene sentido. ¡Gracias! – Eric

7

El patrón general que busca es:

@*[contains(., 'string')] 

que coincidirá con cualquier atributo en el elemento de contexto que contiene string. Así que si lo único que desea buscar en todo el documento para los atributos que contienen string, tendrá que utilizar:

//@*[contains(., 'string')] 
+1

Corto y dulce –

Cuestiones relacionadas