如何在 PHP 中使用 XPath 设置 (not(contains))
Posted
技术标签:
【中文标题】如何在 PHP 中使用 XPath 设置 (not(contains))【英文标题】:How to set up a (not(contains)) with XPath in PHP 【发布时间】:2011-08-30 11:33:17 【问题描述】:我正在使用此 php 代码在特定条件下获取所有包含“$profile_name”的文本。
它可以正常工作,但我还需要提取所有“不”包含“$profile_name”的文本 在相同的条件下。
像这样:
$outputs = $xpath->query("//span[@class='profile' and
not(contains(.,'$profile_name'))]/../div[@class='msgbody']");
好吧,看起来这段代码确实有效,下面的那个,但我发现问题实际上是这段 html
<span class="profile">Jim Jones</span> to <span class="profile">Ronald Weasly
Stitch</span>
在这种情况下,用户 Jim Jones 给 Ronald Weasly 写了一条回复,但我把它误认为是 Ronald Weasly,因为那是最近的时间跨度。
<span class="profile">Jim Jones</span> to <span class="profile">Ronald Weasly</span>
<span class="time">October 21, 2010 at 10:44 am</span>
<div class="msgbody">
<div class="subject">Jeeec</div>
are you developing applications with C+ or ASP, did you see The Social Network? i sense
a huge opportunity for semantic analysts in the future.
</div>
</div>
【问题讨论】:
【参考方案1】:使用:
//*[div[@class='msgbody']]
/span[@class='profile'
and
not(contains(.,'$profile_name'))
]
【讨论】:
哇,你把我弄丢了。我想与原始查询相比发生了很大变化,我无法从中做出正面或反面。我不明白它的一部分是如何成为评论的。我假设我需要它来指定要搜索的 div 类。我的意思是排除查询是一个完全独立的查询,但只是我找不到“不包含”的正确语法 我能够让它返回所有不相等的名称,但不返回相应的 msgbody。使用此代码。$outputs = $xpath->query("//*[div[@class='msgbody']] /span[@class='profile' and not(contains(.,'$profile_name'))]");
试过这个$outputs = $xpath->query("//*[div[@class='msgbody']] /span[@class='profile' and not(contains(.,'$profile_name'))]/../div[@class='msgbody']");
此代码不返回任何结果$outputs = $xpath->query("//span[@class='profile' and not(contains(.,'$profile_name'))]//*[div[@class='msgbody']]");
此代码返回所有不相等的名称。关闭。 $outputs = $xpath->query("//*[div[@class='msgbody']] //span[@class='profile' and not(contains(.,'$profile_name'))]");
以上是关于如何在 PHP 中使用 XPath 设置 (not(contains))的主要内容,如果未能解决你的问题,请参考以下文章
在 xpath 中使用 [not] 检索与给定值不匹配的内容 (PLSQL)
如何在 PHP 中使用 DOM 或 XPATH 获取最近的子节点而不是嵌套的子节点