Domanda

Al momento sto lavorando su estrazione di dati da HTML. Vorrei estrarre il testo tra due tag <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> 

Il uscita dovrebbe essere:

asdfghjk

sdsdsd

asdvcvcfghjk

Un modo per farlo è:

/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]

Tuttavia, poiché il contenuto tra continua a cambiare tutto il tempo Ho bisogno di una soluzione in cui il contenuto tra due tag <p class="xfHeading"> viene estratta.

È stato utile?

Soluzione

Usa :

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

Questo mezzo : selezionare il testo nodi figli di tutti gli elementi p che seguono fratelli del primo elemento p nel documento con attributo class avente valore di xfHeading, e che allo stesso tempo sono precede il secondo elemento p nel documento con attributo class avente valore xfHeading.

Altri suggerimenti

Modifica : Dopo il chiarimento, il mio suggerimento è quello di utilizzare un FLWOR espressione come il seguente. Questo sembra per un <p> con le dovute <b> contenuto del tag in base ai contenuti unici di quel tag <b>, e restituisce il testo di ogni tag <p> che è un fratello di esso.

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

Si noti che il // è un costrutto XPATH, non un commento

RISPOSTA OLD : Senza un esempio di ciò che si desidera i dati risultanti a guardare come, rispondendo alla domanda è un po 'difficile. Tuttavia, per selezionare, ad esempio, il testo all'interno di un tag <b>, faresti:

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

In generale, aggiungendo text() alla fine di un'espressione restituisce il testo all'interno del nodo in questione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top