PHP / XPath: найти текстовый узел, который «начинается с» конкретной строки?

Мне нужно знать, существует ли конкретная строка в определенном узле. Например, мне нужно знать, существует ли «быстрая коричневая лиса», например, в третьем абзаце HTML DOM. Я использую 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 переводит для подсчета третьего элемента p под элементом body, который содержит значение текстового узла «quick» . Это вернет 1 или 0, если искомый термин существует в любом месте внутри значения узла.

Если вам нужно знать, начинается ли значение узла с определенной фразой, используйте вместо этого функцию start-with .

Расширение DOM от PHP поддерживает XPath 1.0.

Вы также можете сделать это без XPath через обычный API:

 $dom = new DOMDocument; $dom->loadXml($html); $thirdPara = $dom->getElementsByTagName('p')->item(2); echo strpos($thirdPara->nodeValue, 'the quick') === 0 ? 1 : 0; 

Метод getElementsByTagName находит, кто бы мог подумать, все элементы по имени тега. Вызов item возвращает третий из этих элементов (основанный на нуле). Функция strpos находит положение первого вхождения строки. Результат вышеприведенного фрагмента будет 1 снова (или 0, если значение узла не начинается с «быстрого».