str_get_html simple_html_dom simple parser how php html dom

simple_html_dom - PHP DOM textContent vs nodeValue?



simple_html_dom() (5)

Espero que esto tenga sentido:

$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);

Salida:

string(15) "old contenttest" NULL string(15) "old contenttest" string(15) "old contenttest"

Porque: nodeValue

Los objetos PHP DOMnode contienen los atributos textContent y nodeValue que parecen ser el innerHTML del nodo.

nodeValue: el valor de este nodo, dependiendo de su tipo

textContent: este atributo devuelve el contenido de texto de este nodo y sus descendientes.

¿Cuál es la diferencia entre estas dos propiedades? ¿Cuándo es apropiado usar uno en lugar del otro?


Finalmente, también quería saber la diferencia, así que busqué en la source y encontré la respuesta; en la mayoría de los casos no habrá una diferencia perceptible, pero hay un montón de casos extremos que debe tener en cuenta.

Ambos ->nodeValue y ->textContent son idénticos para las siguientes clases (tipos de nodos):

La propiedad ->nodeValue proporciona NULL para las siguientes clases (tipos de nodos):

La propiedad ->textContent no existe para las siguientes clases:

  • DOMNameSpaceNode (no documentado, pero se puede encontrar con //namespace:* selector)

La propiedad ->nodeValue no existe para las siguientes clases:

Ver también: dom_node_node_value_read() y dom_node_text_content_read()


Si desea asignar un valor a la propiedad textContent , tenga en cuenta que no funciona para PHP <5.6.1 . Considere usar nodeValue en nodeValue lugar, para compatibilidad con versiones anteriores.


Son lo mismo. (NULL de mikespook es de un DOMNode no DOM)


Tanto textContent como nodeValue devuelven texto no nodeValue ; es decir, &lt; se convierte en < .

textContent concatena todo el contenido de todos los elementos textContent . Esta es una distinción importante; por ejemplo, en Chrome, la longitud máxima de nodeValue es 65536 caracteres (no bytes); si ya ha configurado el contenido de un nodo en algo más largo que eso, deberá iterar nodos secundarios si desea usar nodeValue mientras que textContent realizará la concatenación por usted.

Como se discutió, también hay varias clases de DOM que no son compatibles con nodeValue pero que son compatibles con textContent .

nodeValue es más rápido por razones obvias; sin embargo, no lo use a menos que sepa exactamente cuál es realmente la estructura del nodo.