HTMLDOM:如何在PHP中正确使用textContent属性
每当我尝试走到HTML文件的DOM(我只对文本元素感兴趣)时,如果我指向节点的textContent属性,它将回显该特定节点树中的所有文本。 例如:HTMLDOM:如何在PHP中正确使用textContent属性,php,html,dom,Php,Html,Dom,每当我尝试走到HTML文件的DOM(我只对文本元素感兴趣)时,如果我指向节点的textContent属性,它将回显该特定节点树中的所有文本。 例如: <html lang="en"> <body> <p> 1st text I need</p> <a href="#">2nd text I need</a> <table> <tr> &l
<html lang="en">
<body>
<p> 1st text I need</p>
<a href="#">2nd text I need</a>
<table>
<tr>
<td>3rd text I need</td>
</tr>
</table>
</body>
</html>
我只想从具有直接文本内容的元素中提取文本。在上面的例子中,它们将是p、a和td
我该怎么做
以下是代码(摘自):
您可以在DOM文档上使用。返回所有文本节点
$doc = new DOMDocument;
$doc->loadhtml('<html lang="en">
<body>
<p> 1st text I need</p>
<a href="#">2nd text I need</a>
<table>
<tr>
<td>3rd text I need</td>
</tr>
</table>
</body>
</html>');
$doc->normalizeDocument();
$xpath = new DOMXpath($doc);
$results = $xpath->query("//text()");
foreach($results as $node) {
echo trim($node->wholeText);
}
$doc=新文档;
$doc->loadhtml($doc)
我需要的第一个文本
我需要第三个文本
');
$doc->normalizeDocument();
$xpath=新的DOMXpath($doc);
$results=$xpath->query(//text());
foreach($results as$node){
回声修剪($node->wholeText);
}
谢谢,这很有效。是否有可能修改这些文本元素(这是我的最终目标,我忘了提及)?这将是一个完全不同的问题。公平点。我再提一个问题。谢谢你的回答。如果我看不到你的问题,简短的回答是$node->nodeValue=str_replace(“this”、“that”、“node->wholeText”)代码>但在某些情况下可能更复杂。
<?php
$doc = new DOMDocument();
@$doc->loadHTMLFile('test.html');
walkDom($doc);
function walkDom($node, $level = 0)
{
$indent = '';
for ($i = 0; $i < $level; $i++)
$indent .= ' '; //prettifying the output
if($node->nodeType != XML_TEXT_NODE) {
echo $indent .'<b>' . $node->nodeName .'</b>';
if( $node->nodeType == XML_ELEMENT_NODE ) {
echo $node->textContent;
}
echo '<br>';
}
$cNodes = $node->childNodes;
if (count($cNodes) > 0)
{
$level++; // go one level deeper
foreach($cNodes as $cNode)
walkDom($cNode, $level);
$level = $level - 1;
}
}
$doc = new DOMDocument;
$doc->loadhtml('<html lang="en">
<body>
<p> 1st text I need</p>
<a href="#">2nd text I need</a>
<table>
<tr>
<td>3rd text I need</td>
</tr>
</table>
</body>
</html>');
$doc->normalizeDocument();
$xpath = new DOMXpath($doc);
$results = $xpath->query("//text()");
foreach($results as $node) {
echo trim($node->wholeText);
}