regulares for expresiones example ejemplos consultas xml xpath parent-child xquery

xml - for - xpath expresiones regulares



¿Cómo recuperar el nodo padre usando XQuery? (4)

Alternativamente, también puede utilizar la función Xquery de fn:root() .

Estoy usando XML y XQuerie. Normalmente utilizo una expresión XPath relativa a un nodo principal para recuperar su nodo secundario. Pero, no estoy seguro de cómo hacer el significado opuesto si tengo un nodo secundario, cómo recupero su nodo principal.

<node id="50> <childnode1 childid="51" /> <childnode2 childid="52" /> </node>

Si tengo el nodo <childnode1 childid="51" /> , ¿cómo recupero su padre: <node id="50>


Aquí hay un ejemplo más complejo de cómo obtener el nodo principal (..).

P) Encuentre todas las situaciones donde el idioma más popular de un país es el menos popular de otro país, y ambos países tienen más de un idioma. https://prod-c2g.s3.amazonaws.com/db/Winter2013/files/countries.xml

UNA)

for $b in doc("countries.xml")/countries/country/language for $c in doc("countries.xml")/countries/country/language where $b/../@name != $c/../@name and data($b) = data($c) and count($b/../language) > 1 and count($c/../language) > 1 and $b/@percentage = max($b/../language/@percentage) and $c/@percentage = min($c/../language/@percentage) return <LangPair language="{data($b)}"> <MostPopular>{data($b/../@name)}</MostPopular> <LeastPopular>{data($c/../@name)}</LeastPopular> </LangPair>


usas .. para obtener el padre, así:

../childnode1

así que si tienes algún documento XML como este:

<a id="1"> <b id="2"> <c id="3"> <d id="4"/> </c> <c id="5"/> <c id="6"> <d id="7"/> </c> </b> </a>

entonces la XQuery

//../d[@id = "4"]

Devolvería el nodo c con id de 3 .


Respuesta corta :

..

Esto selecciona el padre del nodo actual (contexto).

Respuestas más largas y más generales :

//node()[childnode1/@childid="51"]

Esto selecciona cualquier nodo en el documento que tiene un elemento hijo llamado childnode1 , que tiene un childid childid , cuyo valor es ''51''.

Se debe tratar de evitar una expresión que contenga la abreviatura // , ya que puede ser muy ineficiente. Utilice ''//'' solo cuando la estructura del documento XML no se conoce de antemano.

Mejor respuesta :

ExpressionSelectingTheChildNode/..