鉴于内容块,我希望在PHP中创建一个函数来检查h1-h3标头标签中是否存在关键字或关键字短语......
例如,如果关键字为“ Blue Violin ”,则文本块为...
你没有看到很多蓝色小提琴。大多数小提琴都有自然的光洁度。 < h1>如果你看到一把蓝色小提琴,它真的很罕见< / h1>
我希望我的功能能够回归:
答案 0 :(得分:2)
/html/body//h1[contains(.,'Blue Violin')]
这将直接或在子节点中匹配包含短语“Blue Violin”的body元素内的所有h1元素。如果它只应出现在直接TextNode中,请将.
更改为text()
。结果以DOMNodeList
返回。
由于您只想知道 if 这个短语,您可以使用以下代码:
$dom = new DOMDocument;
$dom->load('NewFile.xml');
$xPath = new DOMXPath($dom);
echo $xPath->evaluate('count(/html/body//h1[contains(.,"Blue Violin")])');
将返回与此XPath匹配的节点数。如果您的标记无效XHTML,您将无法使用loadXML
。请改用loadHTML
或loadHTMLFile
。此外,如果为其提供指向节点的直接路径,XPath将执行得更快。如果您只有一个h1,h2和h3,请用//h1
替换直接路径。
请注意,contains
区分大小写,因此上述内容与搜索词组中使用的混合大小写不匹配。不幸的是,DOM(或更好的底层libxml)只支持XPath 1.0。我不确定是否有XPath函数来执行不区分大小写的搜索,但从PHP 5.3开始,您也可以在XPath中使用PHP,例如。
$dom = new DOMDocument;
$dom->load('NewFile.xml');
$xpath = new DOMXPath($dom);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions();
echo $xpath->evaluate('count(/html/body//h1[contains(php:functionString("strtolower", .),"blue violin")])');
因此,如果您需要匹配Mixed Case短语或单词,您可以在使用contains
进行检查之前对搜索到的节点中的所有文本进行小写,或者使用您在此处可能会发现有用的任何其他PHP函数。
答案 1 :(得分:0)
除了将PHP函数包含在类中之外,您还可以简单地将Xpath PHP对象转换为常规PHP数组,然后使用PHP中的常规字符串搜索函数直接进行搜索:http://fsockopen.com/php-programming/your-final-stop-for-php-xpath-case-insensitive