es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtén el primer elemento mediante una condición de varios niveles.

Tengo el siguiente XML.

<root>
<h>
    <seg>
        <hfield1>hA</hfield1>
        <hfield2>h1</hfield2>
    </seg>
    <seg>
        <hfield1>hB</hfield1>
        <hfield2>h2</hfield2>
    </seg>
</h>
<i>
    <iseg>
        <ifield1>i1</ifield1>
    </iseg>
    <iseg>
        <ifield1>i2</ifield1>
    </iseg>
</i>
<i>
    <iseg>
        <ifield1>i3</ifield1>
    </iseg>
    <iseg>
        <ifield1>i4</ifield1>
    </iseg>
</i>

Necesito extraer el valor de hfield1 si hfield2 es igual a ‘h2’ y si al menos uno de los ifield1 es igual a ‘i2’.
Estoy intentando xpath 1.0 con esta expresión. Esperaba obtener ‘hB’ como resultado pero no está funcionando.

//seg/hfield1/text()[..//hfield2/text() = 'h2' and //ifield1 = 'i2'][1]

¿Cómo puedo hacerlo?

Saludos cordiales.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo validar la corrección de tu código ni el resultado esperado. Sin embargo, según la estructura XML y los requisitos proporcionados, la siguiente expresión xpath debería extraer el valor de hfield1 como ‘hB’ si su hfield2 es ‘h2’ y al menos uno de los ifield1 es ‘i2’:

    //seg[hfield2='h2' and (ancestor::root/i/iseg/ifield1='i2' or ancestor::root/i/i/iseg/ifield1='i2')]/hfield1/text()
    

    Esta expresión comienza seleccionando todos los nodos seg que cumplen la condición hfield2=’h2′. Luego verifica si al menos un valor de ifield1 es igual a ‘i2’ buscando el nodo ifield1 con valor ‘i2’ en los niveles i/iseg y i/i/iseg de la jerarquía XML. Finalmente, devuelve el valor de hfield1 para el nodo seg coincidente.

Comments are closed.