Php $domxpath->;查询-检查标题
下面的查询仅搜索网站页面上包含“历史记录”的Php $domxpath->;查询-检查标题,php,dom,domparser,Php,Dom,Domparser,下面的查询仅搜索网站页面上包含“历史记录”的标记后的第一段 $paragraph = $domxpath->query(' //h2[*[ contains(text(), "History") ] ] /following-sibling::p[
标记后的第一段
$paragraph = $domxpath->query('
//h2[*[
contains(text(), "History")
]
]
/following-sibling::p[
position() = 1
]'
);
但是我想检查一下是否有任何包含历史记录的
标记
foreach($paragraph as $node) {
$content= $node->nodeValue;
}
if(!isset($content)){
echo $content;
}else{
echo "static content";
}
这样就不行了
更新
$html = file_get_contents( 'www.site.com' );
$document = new DOMDocument();
$document->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$domxpath = new DOMXPath($document);
$paragraph = $domxpath->query('
//h2[*[
contains(text(), "History")
]
]
/following-sibling::p[
position() = 1
]'
);
}
foreach($paragraph as $node) {
$content= $node->nodeValue;
}
if(!isset($content)){
echo $content;
}else{
echo "static content";
}
但我不知道,因为当它没有“历史”时,它不会打印“其他”中的静态内容
代码html:
在下面的div中包含了页面的所有主要内容
<div id="mw-content-text" lang="pt" dir="ltr" class="mw-content-ltr">
我想找到有“历史”的
History[|]
在结束标记的开始标记之间有很多代码,正如上面可以看到的那样,使用此XPath查询可以获取任何包含字符串“History”的
h2
元素:
//h2/*[contains(text(), "History")]
然后,为了检查结果是否为阳性,计算结果。如果大于0,则会出现以下结果:
$paragraph = $domxpath->query('//h2/*[contains(text(), "History")]');
if ($paragraph->length > 0) {
echo "Results!";
}
else {
echo "Not contained";
}
这个问题很不清楚。请提供一个HTML示例,说明您所拥有的内容以及必须匹配的内容。感谢您的反馈,我将改进此问题。@ishegg我更新了我的问题,请查看是否清晰,但如果您发布您收到的HTML摘录以及您需要从中提取的内容,将更容易帮助您。@ishegg再次更新,请看谢谢,但我想你还没有理解我的意思。我想打印的内容只是一个段落。这一段只有在有“历史”的情况下才会被打印出来。不清楚你指的是哪一段。在您自己的xpath中,您也在做同样的事情,当存在包含“history”@Gislefok的
h2
时,xpath会选择下一个同级段落,想象一下,如果页面有历史记录,那么我有一个巨大的页面列表,如果页面没有历史记录,那么这是打印的。只有xpath过滤器没有compare@Gislef很高兴能帮忙。祝你好运
$paragraph = $domxpath->query('//h2/*[contains(text(), "History")]');
if ($paragraph->length > 0) {
echo "Results!";
}
else {
echo "Not contained";
}