estratto di XQuery tra i due tag
-
29-09-2019 - |
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 ??strong> 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.
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.