我目前正在研究从中提取数据 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() 表达式的末尾返回所讨论节点内部的文本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top