2つのタグ間のXquery抽出物
-
29-09-2019 - |
質問
私は現在、データの抽出に取り組んでいます HTML
. 。 2つの間にテキストを抽出したいと思います <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>
出力 あるべきです:
asdfghjk
sdsdsd
asdvcvcfghjk
これを行う1つの方法は、次のとおりです。
/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]
また
/p[class="xfHeading"]/following-sibling::p[position()<4]
ただし、間のコンテンツは常に変更を続けているため、2つのタグ間のコンテンツが必要なソリューションが必要です。 <p class="xfHeading">
抽出されます。
解決
使用する:
(//p[@class="xfHeading"])[1]
/following-sibling::p
[. << (//p[@class="xfHeading"])[2]]
/text()
これの意味は: :すべてのテキストノードの子供を選択します p
最初の兄弟に続いている要素 p
ドキュメントの要素 class
の値を持つ属性 xfHeading
, 、そして同時に2番目の前にあります p
ドキュメントの要素 class
の値を持つ属性 xfHeading
.
他のヒント
編集: :あなたの明確化の後、私の提案は flwor 次のような表現。これはを探します <p>
適切に <b>
そのユニークなコンテンツに基づいてタグコンテンツ <b>
タグを付けて、それぞれのテキストを返します <p>
それの兄弟であるタグ。
for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
where $b/text() = "XYZ:"
return p/text()
に注意してください //
コメントではなく、XPathコンストラクトです
古い答え: :結果のデータをどのようにしたいかという例がなければ、質問に答えるのは少し難しいです。ただし、たとえば、内部のテキストを選択するには <b>
タグ、あなたがするだろう:
/p[class = "xfHeading"]/b/text()
一般に、アプリがあります text()
式の最後まで、問題のノード内のテキストを返します。
所属していません StackOverflow