name last first child attribute xpath xquery

last - xpath value



Uso de XQuery/XPath para obtener el valor de atributo del nodo primario de un elemento (1)

Dado este documento xml:

<?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 esta 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

Obtuve el siguiente error:

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

Parece que la operación ../ es una especie de eliminar 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 del padre depende del atributo hijo que contiene una determinada subcadena.

¡Aclamaciones!


La consulta que ha escrito es seleccionar el atributo f. Sin embargo, no es legal devolver un nodo de atributo de una XQuery. El error se refiere al documento de salida que aquí solo contiene 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 quiso devolver el valor del atributo en lugar del atributo en sí

return data($foonode)