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.

post-filtrar un conjunto de nodos por cambio en atributo cuando el hermano anterior no es posible.

A continuación, tengo un subconjunto de nodos car. Luego quiero procesar esto aún más filtrando por un cambio en un atributo.

Debido a que preceding-sibling trabaja en el documento, la segunda xpath debajo no funcionará si el nodo preceding-sibling es un coche no amarillo. ¿Existe una manera simple de lograr esto en xpath o con xslt mínimo?

<xsl:template match="/">
    <xsl:variable name="yellowCars" select="/cars/car[@color = 'yellow']"></xsl:variable>
    <changedinspectiondate>
        <xsl:apply-templates select="$yellowCars[not(@inspectiondate = preceding-sibling::car[1]/@inspectiondate)]"></xsl:apply-templates>
    </changedinspectiondate>
</xsl:template>
Tags:  ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo ver el subconjunto de nodos de coche mencionados en la pregunta. Sin embargo, para lograr un filtrado por cambio en un atributo, puede utilizar la siguiente expresión XPath en lugar de utilizar preceding-sibling:

    $yellowCars[not(@inspectiondate = preceding-sibling::car[@color = 'yellow'][1]/@inspectiondate)]
    

    Esto filtra cualquier nodo de coche amarillo cuya fecha de inspección sea la misma que la del coche amarillo inmediatamente anterior. Aquí, preceding-sibling::car[@color = 'yellow'][1] selecciona el primer nodo de coche amarillo anterior al nodo actual.

    Alternativamente, en XSLT puede utilizar el eje preceding-sibling:: con un predicado que seleccione solo los nodos de coche amarillos:

    $yellowCars[not(@inspectiondate = preceding-sibling::car[@color = 'yellow'][1]/@inspectiondate)]
    

    Este código XSLT filtra cualquier nodo de coche amarillo cuya fecha de inspección sea la misma que la del coche amarillo inmediatamente anterior. Aquí, preceding-sibling::car[@color = 'yellow'][1] selecciona el primer nodo de coche amarillo anterior al nodo actual, y el predicado [not(@inspectiondate = ...)] verifica si su fecha de inspección no es la misma.

Comments are closed.