PHP DOM textContent vs nodeValue?
PHP DOMnode 对象包含 textContent 和 nodeValue 属性,这两个属性似乎都是节点的内部 HTML。
nodeValue:此节点的值,具体取决于其类型
textContent:此属性返回此节点及其后代的文本内容。
这两个属性之间有什么区别?什么时候使用一个而不是另一个是正确的?
PHP DOMnode 对象包含 textContent 和 nodeValue 属性,这两个属性似乎都是节点的内部 HTML。
nodeValue:此节点的值,具体取决于其类型
textContent:此属性返回此节点及其后代的文本内容。
这两个属性之间有什么区别?什么时候使用一个而不是另一个是正确的?
我最终也想知道其中的区别,所以我深入研究了源代码并找到了答案。在大多数情况下,不会有明显的差异,但是您应该注意一堆边缘情况。
对于以下类(节点类型),两者完全相同:->nodeValue
->textContent
该属性对以下类(节点类型)产生结果:->nodeValue
NULL
对于以下类,该属性不存在:->textContent
DOMNameSpaceNode
(未记录,但可以使用选择器找到)//namespace:*
对于以下类,该属性不存在:->nodeValue
另请参见:dom_node_node_value_read()
和 dom_node_text_content_read()
希望这是有道理的:
$doc = DOMDocument::loadXML('<body><!-- test --><node attr="test1">old content<h1>test</h1></node></body>');
var_dump($doc->textContent);
var_dump($doc->nodeValue);
var_dump($doc->firstChild->textContent);
var_dump($doc->firstChild->nodeValue);
输出:
string(15) "old contenttest"
NULL
string(15) "old contenttest"
string(15) "old contenttest"