XQuery-Extrakt zwischen zwei Tags
-
29-09-2019 - |
Frage
Zur Zeit arbeite ich auf Daten von HTML
extrahieren. Ich möchte den Text zwischen zwei <p class="xfHeading">
Tags extrahieren.
<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>
Die Ausgang sollte:
asdfghjk
sdsdsd
asdvcvcfghjk
Eine Möglichkeit, dies zu tun ist:
/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]
oder
/p[class="xfHeading"]/following-sibling::p[position()<4]
Da jedoch der Inhalt zwischen hält über die Änderung die ganze Zeit ich brauche eine Lösung, wobei der Gehalt zwischen den beiden Tags <p class="xfHeading">
extrahiert wird.
Lösung
Mit
(//p[@class="xfHeading"])[1]
/following-sibling::p
[. << (//p[@class="xfHeading"])[2]]
/text()
Dieses Mittel : Wählen Sie die Text-Knoten Kinder aller p
Elemente, die Geschwister des ersten p
Element im Dokument mit class
Attribut-Wert von xfHeading
folgen, und dass zur gleichen Zeit vor dem zweiten p
Element in dem Dokument mit class
Attributwert xfHeading
aufweist.
Andere Tipps
Bearbeiten : Nach der Klärung, mein Vorschlag ist ein FLWOR <p>
mit den richtigen <b>
Tag Inhalten basierend auf dem einzigartigen Inhalt dieses <b>
Tages und gibt den Text jeden <p>
-Tag, das ein Geschwister davon.
for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
where $b/text() = "XYZ:"
return p/text()
Beachten Sie, dass der //
ist ein XPath-Konstrukt, kein Kommentar
ALTE ANTWORT : Ohne ein Beispiel dafür, was man die resultierenden Daten aussehen möchte, die Frage zu beantworten ist ein bisschen hart. Um jedoch zu wählen, zum Beispiel der Text in einem <b>
Tag, würden Sie tun:
/p[class = "xfHeading"]/b/text()
Im Allgemeinen text()
bis zum Ende eines Ausdrucks anhängen gibt den Text innerhalb des Knotens in Frage.