web-dev-qa-db-ja.com

PHP DOMでノードのテキストを取得する

PHP DOMを使用してこのマークアップから文字列「テキスト」を抽出するにはどうすればよいですか?

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

$div->nodeValue「notthis」を含む

29
bgcode

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;
}

テキストノードが増えて最初のテキストノードだけが必要な場合は、$nodeValueの最初の割り当ての後にbreakを実行できます。

21
alex

XPathを使用してDOMTextノードに直接アクセスできます。

$xpath = new DOMXPath($dom_document);
$node = $xpath->query('//div/text()')->item(0);
echo $node->textContent; // text
29
netcoder