2010-01-29 18 views
19

Teniendo en cuenta este documento xml:El uso de XQuery/XPath para obtener el valor del atributo del nodo padre de un elemento

<?xml version="1.0" encoding="UTF-8"?> 
    <mydoc> 
     <foo f="fooattr"> 
      <bar r="barattr1"> 
       <baz z="bazattr1">this is the first baz</baz> 
      </bar> 
      <bar r="barattr2"> 
       <baz z="bazattr2">this is the second baz</baz> 
      </bar> 
     </foo> 
    </mydoc> 

que está siendo procesado por este xquery:

let $d := doc('file:///Users/mark/foo.xml') 
let $barnode := $d/mydoc/foo/bar/baz[contains(@z, '2')] 
let $foonode := $barnode/../../@f 
return $foonode 

me sale el siguiente error:

"Cannot create an attribute node (f) whose parent is a document node". 

parece que la operación se ../ tipo de eliminación de los nodos coincidentes del resto del documento de tal manera que cree que es el nodo del documento.

Estoy abierto a otros enfoques, pero la selección de la matriz depende del atributo secundario que contiene una cierta subcadena.

¡Salud!

Respuesta

30

La consulta que ha escrito está seleccionando el atributo f. Sin embargo, no es legal devolver un nodo de atributo desde un XQuery. El error se refiere al documento de salida que aquí contiene solo un atributo (aunque este mensaje de error es engañoso, ya que técnicamente no hay ningún documento de salida aquí, solo hay un nodo de atributo que se devuelve).

Probablemente querían devolver el valor del atributo en lugar del propio atributo

return data($foonode) 
+0

De hecho lo hice! Muchas gracias. –

Cuestiones relacionadas