我正在尝试解析网页以从论坛获取帖子。
每封邮件的开头均采用以下格式

<div id="post_message_somenumber">

我只想拿第一个

我在yql中尝试了xpath='//div[starts-with(@id, '"post_message_')]'但没有成功
我还在学习,有人有建议

最佳答案

我认为我有一个不需要处理 namespace 的解决方案。

这是一个选择所有与div的匹配的选项:

//div[@id[starts-with(.,"post_message")]]

但是您说您只想要“第一个”(我想您是说整个页面中的第一个“命中”吗?)。这是一个轻微的修改,仅选择作为第一个匹配结果:

(//div[@id[starts-with(.,"post_message")]])[1]

这些使用点来表示starts-with()函数中的id值。您可能必须转义使用您的语言的特殊字符。

在PowerShell中对我来说效果很好:

# Load a sample xml document
$xml = [xml]'<root><div id="post_message_somenumber"/><div id="not_post_message"/><div id="post_message_somenumber2"/></root>'

# Run the xpath selection of all matching div's
$xml.selectnodes('//div[@id[starts-with(.,"post_message")]]')

结果:

id
--
post_message_somenumber
post_message_somenumber2

或者,仅针对第一个比赛:

# Run the xpath selection of the first matching div
$xml.selectnodes('(//div[@id[starts-with(.,"post_message")]])[1]')

结果:

id
--
post_message_somenumber

09-19 09:40