Pregunta

Actualmente estoy trabajando en la extracción de datos de HTML. Me gustaría extraer el texto entre dos etiquetas <p class="xfHeading">.

         <p class="xfHeading"><b>XYZ:</b></p> 
            <p>asdfghjk</p>  
            <p>sdsdsd</p>  
            <p>asdvcvcfghjk</p>  

         <p class="xfHeading"><b>ABC:</b></p> 
            <P>fvgbhnjm</P>  

         <p class="xfHeading"><b>PQR:</b></p> 
            <ul> 

            </ul> 

         <p class="xfHeading"><b>MNO:</b></p> 
             <ul> 
                <li>jdjshdj</li>  
             </ul> 

La salida debería ser:

asdfghjk

sdsdsd

asdvcvcfghjk

Una forma de hacer esto es:

/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]

o

/p[class="xfHeading"]/following-sibling::p[position()<4]

Sin embargo ya que el contenido entre sigue cambiando todo el tiempo que necesito una solución en la que el contenido entre el <p class="xfHeading"> dos etiquetas se extrae.

¿Fue útil?

Solución

Uso

(//p[@class="xfHeading"])[1]
          /following-sibling::p
             [. << (//p[@class="xfHeading"])[2]]
                 /text()

Este medio de : Seleccionar los niños texto nodos de todos los elementos p que está siguiendo a los hermanos del primer elemento p en el documento con el atributo class que tiene valor de xfHeading, y que al mismo tiempo son anterior al segundo elemento p en el documento con el atributo class que tiene valor de xfHeading.

Otros consejos

Editar : Después de su aclaración, mi sugerencia es utilizar un FLWOR expresión como la siguiente. Este busca una <p> con el contenido de la etiqueta <b> adecuadas en base a los contenidos exclusivos de esa etiqueta <b>, y devuelve el texto de cada etiqueta <p> que es un hermano de ella.

for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
    where $b/text() = "XYZ:"
        return p/text()

Tenga en cuenta que la // es una construcción XPath, no un comentario

vieja respuesta : Sin un ejemplo de lo que le gustaría a los datos resultantes se parecen, en respuesta a la pregunta es un poco difícil. Sin embargo, para seleccionar, por ejemplo, el texto dentro de una etiqueta <b>, haría:

/p[class = "xfHeading"]/b/text()

En general, añadiendo text() al final de una expresión devuelve el texto en el interior del nodo en cuestión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top