使用Xpath时遇到问题;以“开始”;解析xhtml

使用Xpath时遇到问题;以“开始”;解析xhtml,xpath,yql,Xpath,Yql,我正在尝试解析网页以从论坛获取帖子。 每条消息的开头都以以下格式开头 <div id="post_message_somenumber"> 我只想得到第一个 我在yql中尝试了xpath='//div[以(@id,“'post_message'')]”开头,但没有成功 我还在学习,有人有什么建议吗 我尝试了xpath='//div[以(@id, “在yql中发布消息”] 成功我还在学这个, 有什么建议吗 如果问题不是由于许多嵌套的撇号和未闭合的双引号造成的,那么最有可能的原因(

我正在尝试解析网页以从论坛获取帖子。
每条消息的开头都以以下格式开头

<div id="post_message_somenumber">

我只想得到第一个

我在yql中尝试了
xpath='//div[以(@id,“'post_message'')]”开头
,但没有成功
我还在学习,有人有什么建议吗

我尝试了
xpath='//div[以(@id,
“在yql中发布消息”]
成功我还在学这个, 有什么建议吗

如果问题不是由于许多嵌套的撇号和未闭合的双引号造成的,那么最有可能的原因(我们只能猜测而不显示XML文档)是使用了默认名称空间

指定默认命名空间中元素的名称是XPath中最常见的问题。如果您在SO或internet上搜索“XPath默认名称空间”,您将找到许多具有正确解决方案的源代码

通常,必须调用一个特殊方法,将前缀(例如
“x:
)绑定到默认名称空间。然后,在XPath表达式中,每个元素名
“someName”
必须替换为
“x:someName

这里有一个


阅读您的语言/xpath引擎的文档,了解如何在特定环境中执行类似操作。

我想我有一个解决方案,不需要处理名称空间

下面是一个选择所有匹配div的

//div[@id[以(,“post_message”)开头]]
但是你说你只想要“第一个”(我想你是指整个页面中的第一个“点击量”)。这里有一个小小的修改,它只选择了第一个匹配结果

(//div[@id[以(,“post_message”)]开头][1]
这些函数使用点表示
start-with()
函数中id的值。您可能需要转义语言中的特殊字符

它在PowerShell中对我非常有用:

#加载示例xml文档
$xml=[xml]“”
#运行所有匹配div的xpath选择
$xml.selectnodes('//div[@id[以(,“post_message”)]]开头)
结果:

id
--
发消息给某人
发消息给某人2
或者,就第一场比赛而言:

#运行第一个匹配div的xpath选择
$xml.selectnodes(“(//div[@id[以(,“post_message”)开头])[1]”)
结果:

id
--
发消息给某人

这一个给出了页面上所有元素的列表,这些元素的ID为
expiredUserDetails
,还包含文本或元素
Details

好问题+1。请参阅我的答案,了解问题的两个可能原因和解决方案。问题是引号和
ID的值(可能是第二个问题)(它不是以双引号开头)。您需要类似于
xpath='//div[以(@id,“post\u message”)开头]“
我不知道yql是什么,但我怀疑问题在于如何编写包含引号的XPath表达式,然后将其嵌入或转义到宿主语言环境中。感谢您的回答。Salathe,您的建议奏效了。yql是yahoo查询语言,与yahoo管道一起,对于不懂编程的人来说是一种很好的方式正在学习如何解析网页、组合rss提要等。
@FindBy(xpath = "//div[starts-with(@id,'expiredUserDetails') and contains(text(), 'Details')]") 
private WebElementFacade ListOfExpiredUsersDetails;