PHP / XPath: найти текстовый узел, который «начинается» с определенной строки? - PullRequest
2 голосов
/ 28 января 2011

Мне нужно знать, существует ли конкретная строка в определенном узле.Например, мне нужно знать, существует ли «быстрая коричневая лиса», скажем, в третьем абзаце HTML DOM.Я использую PHP DOMXPath.Есть предложения?

1 Ответ

5 голосов
/ 28 января 2011

Попробуйте следующее:

Пример источника:

$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 переводит в count третий элемент p ниже элемента body, который содержит значение текстового узла "quick" . Это вернет 1 или 0, если искомый термин существует где-либо в пределах значения узла.

Если вам нужно знать, начинается ли значение узла с определенной фразы, используйте вместо нее начинается с функции .

Расширение PHP DOM поддерживает 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, если значение узла не начинается с «быстрого».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...