2011-12-02 17 views
10

Necesito restringir la búsqueda del nodo xpath a un subárbol. Actualmente estoy usando el método siguiente, pero busca en todo un documento si le doy el documento o el nodo del que quiero buscar.xpath buscar en el subárbol

private NodeList findNodes(Object obj,String xPathString) throws ... { 
    XPath xPath = XPathFactory.newInstance().newXPath(); 
    XPathExpression expression = xPath.compile(xPathString); 
    return (NodeList) expression.evaluate(obj, XPathConstants.NODESET); 
} 

solución que estoy usando ahora es que puedo crear nuevo documento, añada el nodo y buscar en el nuevo documento, y luego fusionar. Quiero mejorar esto. Se puede hacer?

El XPath que estoy usando es //nodeName.

+2

nos muestran el XPath que está utilizando – soulcheck

+0

creo que la restricción tendría que hacerse en la expresión XPath. – McDowell

+0

agregué el xpath en la edición. –

Respuesta

13

Usted está buscando en el eje // que significa 'cualquier nodo descendiente de la raíz del documento',

cambiarlo a .// ejes (descendands del nodo de contexto) y funcionará como se espera.

2

.//nodeName buscará un elemento nodeName en cualquier lugar dentro del nodo de contexto dado.

8

es necesario distinguir entre una expresión relativaXPathabsoluta y .

Buena pregunta +1.

En XPath, cualquier expresión que comience con / es expresión absoluta de XPath. Se evalúa una expresión absoluta de XPath en el documento actual.

Por el contrario, relativo expresión XPath se evalúa fuera del nodo actual (contexto).

Esto explica el problema notificado: //nodeName es una expresión absoluta de XPath.

Lo que queremos es una expresión relativa XPath, tales como:

.//nodeName 
Cuestiones relacionadas