PHP DOM textContent vs nodeValue?

2022-08-30 10:31:29

PHP DOMnode 对象包含 textContentnodeValue 属性,这两个属性似乎都是节点的内部 HTML。

nodeValue:此节点的值,具体取决于其类型

textContent:此属性返回此节点及其后代的文本内容。

这两个属性之间有什么区别?什么时候使用一个而不是另一个是正确的?


答案 1

我最终也想知道其中的区别,所以我深入研究了源代码并找到了答案。在大多数情况下,不会有明显的差异,但是您应该注意一堆边缘情况。

对于以下类(节点类型),两者完全相同:->nodeValue->textContent

该属性对以下类(节点类型)产生结果:->nodeValueNULL

对于以下类,该属性不存在:->textContent

  • DOMNameSpaceNode(未记录,但可以使用选择器找到)//namespace:*

对于以下类,该属性不存在:->nodeValue

另请参见:dom_node_node_value_read()dom_node_text_content_read()


答案 2

希望这是有道理的:

$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"

因为:nodeValue - 此节点的值,具体取决于其类型


推荐