我正在尝试解析网页以从论坛获取帖子。
每封邮件的开头均采用以下格式
<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