2012-02-06 17 views
8

¿Existe alguna forma de aplicar la función starts-with de XPath al nombre de un nodo en lugar de a su valor? Quiero seleccionar los FOObar y FOObaz nodos desde el siguiente documento XML sin seleccionar el nodo notFOO:Consulta de XPath para nombres de nodo que coinciden con un determinado patrón

<?xml version="1.0" encoding="UTF-8" ?> 
<RootNode> 
    <FOObar xmlns="http://sample.example.com"> 
     <value>numOne</value> 
    </FOObar> 
    <FOObaz xmlns="http://sample.example.com"> 
     <value>numTwo</value> 
    </FOObaz> 
    <notFOO xmlns="http://sample.example.com"> 
     <value>numThree</value> 
    </notFOO> 
</RootNode> 

Tengo que es posible utilizar starts-with para buscar basado en nodos de texto, por ejemplo,

//sample:value[starts-with(.,'num')] 

¿Existe alguna manera de escribir lo siguiente que sea sintácticamente válido?

//sample:[starts-with(node(),'FOO')] 

Esta pregunta originalmente con un SSCCE, pero ahora que la pregunta se responde, todo ese código es sólo el desorden. Todavía está disponible en el revision history, por supuesto.

Respuesta

22

Utilice los name() o local-name() funciones para referirse a los nodos por nombre:

//*[starts-with(local-name(), 'FOO')] 
+0

Ah, he estado buscando algo como 'local-name()' por horas. Estaba empezando a pensar que no existía tal función. Para su información futura, esta respuesta es compatible con el espacio de nombres: '// sample: * [starts-with (local-name(), 'FOO')]' – Pops

+2

Especificación W3C para 'local-name': http: // www .w3.org/TR/xpath/# function-local-name – Pops

Cuestiones relacionadas