XPathExpression no evaluatng en el contexto adecuado?

Estoy tratando de analizar algunos XML de la USGS.

Aquí está un ejemplo

El parámetro "parameterCd" enumera los 3 elementos de datos que quiero volver. Puedo o no puedo recuperar todos los 3.

Estoy haciendo esto en un Android usando las bibliotecas javax.

En mi código, inicialmente recuperar los nodos 0-3 ns1: timeSeries. Esto funciona bien. Lo que entonces quiero hacer es, en el contexto de un único nodo timeSeries, recuperar los nodos ns1: variable y ns1: values.

Así que en mi código abajo donde tengo:

expr = xpath.compile("//ns1:variable"); NodeList variableNodes = (NodeList) expr.evaluate(timeSeriesNode, XPathConstants.NODESET); 

Yo esperaría sólo recuperar un nodo, ya que la evaluación DEBE estar sucediendo en el contexto de la única timeSeriesNode que estoy pasando en (de acuerdo con la documentación ). Sin embargo, en su lugar, devuelve todos los nodos ns1: variable del documento.

¿Me estoy perdiendo de algo?

Aquí están las porciones relevantes …

 XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); xpath.setNamespaceContext(new InstantaneousValuesNamespaceContext()); XPathExpression expr; NodeList timeSeriesNodes = null; InputStream is = new ByteArrayInputStream(sourceXml.getBytes()); try { expr = xpath.compile("//ns1:timeSeries"); timeSeriesNodes = (NodeList) expr.evaluate(new InputSource(is), XPathConstants.NODESET); for(int timeSeriesIndex = 0;timeSeriesIndex < timeSeriesNodes.getLength(); timeSeriesIndex++){ Node timeSeriesNode = timeSeriesNodes.item(timeSeriesIndex); expr = xpath.compile("//ns1:variable"); NodeList variableNodes = (NodeList) expr.evaluate(timeSeriesNode, XPathConstants.NODESET); // Problem here. I've got all the variables, not the individual one I want. for(int variableIndex = 0; variableIndex < variableNodes.getLength(); variableIndex++){ Node variableNode = variableNodes.item(variableIndex); expr = xpath.compile("//ns1:valueType"); NodeList valueTypeNodes = (NodeList) expr.evaluate(variableNode, XPathConstants.NODESET); } } } catch (XPathExpressionException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.