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.

“Get” para el que no tiene un hijo inmediato.

Tengo las siguientes piezas de HTML.

bloque 1:

1:11

this is a content with strong content this is some extra data.

bloque 2:

this is extra content

bloque 3:

1:11

this is content with this is some extra data.

Quiero un XSLT que recupere solo el primer nodo p que no tenga ningún strong como hijo inmediato.

El resultado que quiero es

para el bloque 1 – this is a content with strong content this is some extra data.
para el bloque 2, esto está funcionando bien – este es un contenido adicional
para el bloque 3, esto está funcionando bien – este es un contenido con esto es algún dato adicional.

Intenté el siguiente XSLT descendant::p[not(./strong)][1]. esto no está funcionando para el bloque 1. ¿Dónde me estoy equivocando?

Tags:  

Answer

  1. Avatar for davy.ai

    Para recuperar solo el primer nodo p que no tenga ningún strong como hijo inmediato, puede utilizar el siguiente XSLT:

    <xsl:template match="/">
      <xsl:apply-templates select="//div"></xsl:apply-templates>
    </xsl:template>
    
    <xsl:template match="div">
      <xsl:value-of select=".//p[not(strong)][1]"></xsl:value-of>
      <xsl:text>
    </xsl:text> <!-- agregar un salto de línea después de cada salida -->
    </xsl:template>
    

    Explicación:

    • La primera plantilla coincide con el nodo raíz y selecciona todos los nodos div para su procesamiento posterior.
    • La segunda plantilla coincide con cada nodo div y selecciona el primer nodo p que no tenga ningún strong como hijo inmediato, utilizando el predicado [not(strong)][1]. La función value-of se utiliza para mostrar el contenido de texto del nodo seleccionado.
    • El elemento text se utiliza para agregar un salto de línea después de cada salida.

    Esto debería funcionar para los tres bloques de HTML que proporcionó.

Comments are closed.