两个标签之间的XQuery提取物
-
29-09-2019 - |
题
我目前正在研究从中提取数据 HTML
. 。我想在两个之间提取文本 <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
一种方法是:
/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]
但是,由于之间的内容一直在不断变化,所以我需要一个解决方案,其中两个标签之间的内容 <p class="xfHeading">
提取。
解决方案
采用:
(//p[@class="xfHeading"])[1]
/following-sibling::p
[. << (//p[@class="xfHeading"])[2]]
/text()
这表示: :选择所有人的文字节点孩子 p
关注第一个兄弟姐妹的元素 p
文档中的元素 class
具有值的属性 xfHeading
, ,同时在第二个 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