Получение текста узла в PHP DOM - PullRequest
27 голосов
/ 19 июня 2011

Как я могу извлечь строку "текст" из этой разметки с помощью PHP DOM?

<div><span>notthis</span>text</div>

$div->nodeValue включает "notthis"

Ответы [ 2 ]

29 голосов
/ 19 июня 2011

Вы можете получить доступ к DOMText узлу напрямую, используя XPath:

$xpath = new DOMXPath($dom_document);
$node = $xpath->query('//div/text()')->item(0);
echo $node->textContent; // text
21 голосов
/ 19 июня 2011

Пока вы можете влиять на DOM, вы можете удалить это span.

$span = $div->getElementsByTagName('span')->item(0);
$div->removeChild($span);

$nodeValue = $div->nodeValue;

В качестве альтернативы просто получите доступ к текстовому узлу $div.

foreach($div->childNodes as $node) {

    if ($node->nodeType != XML_TEXT_NODE) {
        continue;
    }
    $nodeValue = $node;
}

Если у вас больше текстовых узлов и вам нужны только первые, вы можете break после первого назначения $nodeValue.

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