PHP/XPath:查找文本节点;以“开始”;特定的字符串?

PHP/XPath:查找文本节点;以“开始”;特定的字符串?,php,xml,dom,xpath,Php,Xml,Dom,Xpath,我需要知道特定节点中是否存在特定字符串。例如,我需要知道HTMLDOM的第三段中是否存在“QuickBrownFox”。我正在使用PHP的DOMXPath。有什么建议吗?试试以下方法: 示例来源: $html = <<< HTML <body> <p>the dead brown fox</p> <p>the slow brown fox</p> <p>the quick brown

我需要知道特定节点中是否存在特定字符串。例如,我需要知道HTMLDOM的第三段中是否存在“QuickBrownFox”。我正在使用PHP的DOMXPath。有什么建议吗?

试试以下方法:

示例来源:

$html = <<< HTML
<body>
    <p>the dead brown fox</p>
    <p>the slow brown fox</p>
    <p>the quick brown fox</p>
    <p>the crawling brown fox</p>
</body>
HTML;
$dom = new DOMDocument;
$dom->loadXml($html);
$xp = new DOMXPath($dom);
echo $xp->evaluate('count(/body/p[3][contains(., "quick")])');
XPath转换为body元素下面的第三个p元素,该元素的文本节点值为“quick”。如果搜索的项存在于节点值中的任何位置,则返回1或0

如果需要知道节点值是否以特定短语开头,请使用

PHP的DOM扩展支持XPath 1.0

您也可以通过常规API在不使用XPath的情况下执行此操作:

$dom = new DOMDocument;
$dom->loadXml($html);
$thirdPara = $dom->getElementsByTagName('p')->item(2);
echo strpos($thirdPara->nodeValue, 'the quick') === 0 ? 1 : 0;
谁会想到,该方法会按标记名查找所有元素。该调用返回这些元素中的第三个(从零开始)。函数查找字符串第一次出现的位置。上述代码段的结果将再次为1(如果节点值不是以“快捷键”开头,则为0)