【问题标题】:PHP DOM textContent vs nodeValue?PHP DOM textContent vs nodeValue?
【发布时间】:2012-09-05 01:04:55
【问题描述】:

PHP DOMnode 对象包含一个textContentnodeValue 属性,它们似乎都是节点的innerHTML。

nodeValue:这个节点的值,取决于它的类型

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

这两个属性有什么区别?什么时候用一个代替另一个合适?

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    希望这是有道理的:

    $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 - The value of this node, depending on its type

    【讨论】:

    • DOMDocument 的 nodeValue 为 NULL 那么?
    【解决方案2】:

    它们是一样的。 (mikespook 的 NULL 来自非 DOMNode)

    【讨论】:

    • 不,DOMDocument 是 DOMNode 的后代;属性 getter 的实现只是将值定义为 NULL。
    • 嗯?问题是关于 DOMNode,而不是 DOMDocument。
    • 是的,嗯,DOMDocument 也是一个 DOMNode 不是吗?我专门指的是关于迈克的回答的评论。
    【解决方案3】:

    我终于也想知道其中的区别,于是我挖了source,找到了答案;在大多数情况下,不会有明显的区别,但是您应该注意一些边缘情况。

    -&gt;nodeValue-&gt;textContent 对于以下类(节点类型)是相同的:

    -&gt;nodeValue 属性为以下类(节点类型)生成 NULL

    -&gt;textContent 属性对于以下类不存在:

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

    -&gt;nodeValue 属性对于以下类不存在:

    另请参阅:dom_node_node_value_read()dom_node_text_content_read()

    【讨论】:

      【解决方案4】:

      如果您想为textContent 属性分配一个值,请注意它不适用于PHP < 5.6.1。考虑改用nodeValue,以实现向后兼容性。

      【讨论】:

        【解决方案5】:

        textContentnodeValue 都返回未转义的文本;即&amp;lt; 变为&lt;

        textContent 将所有子项的所有内容连接在一起。这是一个重要的区别;例如,在 Chrome 中,nodeValue 的最大长度是 65536 个字符(不是字节);如果您已经将节点的内容设置为比此更长的内容,如果您想使用 nodeValue,则需要迭代子节点,而 textContent 将为您执行连接。

        如上所述,还有几个 DOM 类不支持nodeValue,但支持textContent

        nodeValue 更快,原因很明显;但是,除非您确切知道节点结构的真正含义,否则不要使用它。

        【讨论】:

          猜你喜欢
          • 2014-02-14
          • 1970-01-01
          • 2011-11-12
          • 2013-01-25
          • 2011-09-11
          • 1970-01-01
          • 2011-05-09
          • 2013-06-23
          • 2014-08-17
          相关资源
          最近更新 更多