XPath-选择所有文本作为单行

时间:2019-02-05 21:22:25

标签: html xml xpath web-scraping xpath-1.0

我有以下HTML:

<p>
    Some cool text
    <a href="#">looks like</a>
    this.
</p>

我想将文本抓成一行:

  

一些很酷的文字看起来像这样。

我当前正在使用以下XPath查询:

  

// p // text()

它返回所有文本,但以单独的行显示:

  

一些很酷的文字

     

看起来像

     

这个。

是否有关于如何修改查询以使查询可以单行返回的想法?

查询需要满足XPath1.0要求。

3 个答案:

答案 0 :(得分:2)

text()选择单个文本节点,并且元素之间(有文本的地方)将始终至少有一个文本节点。您想要的是将p转换为字符串:

//p/string(.)

答案 1 :(得分:2)

如果您具有XPath-2.0或更高版本,则可以使用string-join(...)合并text()值:

string-join(normalize-space(p))

答案 2 :(得分:1)

此XPath(1.0或更高版本)

string(normalize-space())

将返回

"Some cool text looks like this."

根据要求在一行中。

另请参阅Testing text() nodes vs string values in XPath