我目前正致力于从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">
之间的内容。
答案 0 :(得分:0)
编辑:在您澄清之后,我的建议是使用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构造,而不是注释
OLD ANSWER :如果没有您想要的结果数据的示例,回答这个问题有点困难。但是,要选择<b>
标记内的文字,您可以执行以下操作:
/p[class = "xfHeading"]/b/text()
通常,将text()
附加到表达式的末尾将返回相关节点内的文本。
答案 1 :(得分:0)
使用强>:
(//p[@class="xfHeading"])[1]
/following-sibling::p
[. << (//p[@class="xfHeading"])[2]]
/text()
这意味着:选择所有p
元素的文本节点子元素,这些元素遵循文档中具有p
属性的第一个class
元素的兄弟节点值xfHeading
,同时位于文档中第二个p
元素之前,class
属性的值为xfHeading
。