Jak mogę wyodrębnić ciąg „text” z tego znacznika za pomocą PHP DOM?

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

$div->nodeValue zawiera „nie to”

35
bgcode 19 czerwiec 2011, 05:05

2 odpowiedzi

Najlepsza odpowiedź

Dopóki możesz wpływać na DOM, możesz usunąć span.

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

$nodeValue = $div->nodeValue;

Alternatywnie, po prostu uzyskaj dostęp do węzła tekstowego $div.

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

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

Jeśli skończysz z większą liczbą węzłów tekstowych i chcesz tylko pierwszego, możesz break po pierwszym przypisaniu $nodeValue.

26
alex 19 czerwiec 2011, 05:07

Możesz uzyskać dostęp do węzła DOMText bezpośrednio za pomocą XPath:

$xpath = new DOMXPath($dom_document);
$node = $xpath->query('//div/text()')->item(0);
echo $node->textContent; // text
37
netcoder 19 czerwiec 2011, 05:27