2010-08-29 12 views
5

Estoy intentando encontrar un nodo xml con la consulta xpath. pero no puedo hacerlo funcionar. En Firefox, el resultado siempre es "indefinido" y Chrome arroja un código de error.xpath con el documento dom

<script type="text/javascript"> 

var xmlString = '<form><name>test</name></form>'; 
var doc = new DOMParser().parseFromString(xmlString,'text/xml'); 

var result = doc.evaluate('/form/name', doc, 
          null, XPathResult.ANY_TYPE, null); 

alert(result.stringValue); 

</script> 

¿Qué problema hay en este código?

+0

Try '// forma/nombre' –

Respuesta

5

No sé por qué obtuviste este error, pero puedes cambiar XPathResult.ANY_TYPE a XPathResult.STRING_TYPE y funcionará (probado en Firefox 3.6).

Ver:

var xmlString = '<form><name>test</name></form>'; 
var doc = new DOMParser().parseFromString(xmlString,'text/xml'); 
var result = doc.evaluate('/form/name', doc, null, XPathResult.STRING_TYPE, null); 
alert(result.stringValue); // returns 'test' 

Véase en jsfiddle.


DETALLES:

El cuarto parámetro del método evaluate es un número entero donde se especifica qué tipo de resultado es lo que necesita (reference). Hay muchos types, como número entero, cadena y cualquier tipo. Este método devuelve un XPathResult, que tiene muchas propiedades.

Debe hacer coincidir la propiedad (numberValue, stringValue) con la propiedad utilizada en evaluate.

Simplemente no entiendo por qué any type no funcionó con string value.

2

XPathResult.ANY_TYPE devolvería un conjunto de nodos para la expresión xpath /form/name, por lo que result.stringValue tendría problemas para convertir el conjunto de nodos en cadena. En este caso se puede utilizar result.iterateNext().textContent

Sin embargo, una expresión como count(/form/name) volvería un valor numérico cuando se utiliza con XPathResult.ANY_TYPE y se podía utilizar result.numberValue para recuperar el número en ese caso.

Algunos explicación más detallada en https://developer.mozilla.org/en/DOM/document.evaluate#Result_types

Cuestiones relacionadas