Tipos de nodos

2310 vistas

Antes de empezar a recorrer un árbol DOM y a extraer datos, necesitamos entender bien su estructura. Es importante saber la diferencia entre los diferentes tipos de nodos. Confundir entre Node y Element es un error muy frecuente.

  • Node (org.w3c.dom.Node): Un Node es la unidad base del árbol. Puede ser texto, un elemento, una porción CDATA o una instrucción. Para saber el tipo de un Node tendremos que usar el método getNodeType().
  • Element (org.w3c.dom.Element): la interfaz Element define un elemento de XML (XHTML o HTML). Un elemento lo forman un tag, atributos y un contenido (otros nodos y elementos).

Veamos los diferentes tipos de nodos y el resultado de los métodos capaces de saber su contenido:

[table]
  [tr]
    [td]

Interface (org.w3c.dom)

[/td]
    [td]

getNodeType() (short)

[/td]
    [td]

getNodeName() (String)

[/td]
    [td]

getNodeValue() (String)

[/td]
    [td]

getAttributes() (NamedNodeMap)

[/td]
  [/tr]
  [tr]
    [td]

Attr

[/td]
    [td]

ATTRIBUTE_NODE

[/td]
    [td]

Nombre del atributo

[/td]
    [td]

Valor del atributo

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

CDATASection

[/td]
    [td]

CDATA_SECTION_NODE

[/td]
    [td]

"#cdata-section"

[/td]
    [td]

Contenido de la sección CDATA.

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

Comment

[/td]
    [td]

COMMENT_NODE

[/td]
    [td]

"#comment"

[/td]
    [td]

Contenido del comentario

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

Document

[/td]
    [td]

DOCUMENT_NODE

[/td]
    [td]

"#document"

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

DocumentFragment

[/td]
    [td]

DOCUMENT_FRAGMENT_NODE

[/td]
    [td]

"#document-fragment"

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

DocumentType

[/td]
    [td]

DOCUMENT_TYPE_NODE

[/td]
    [td]

Nombre del tipo

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

Element

[/td]
    [td]

ELEMENT_NODE

[/td]
    [td]

Nombre del tab

[/td]
    [td]

null

[/td]
    [td]

Atributos del elemento

[/td]
  [/tr]
  [tr]
    [td]

Entity

[/td]
    [td]

ENTITY_NODE

[/td]
    [td]

Nombre de la entidad

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

EntityReference

[/td]
    [td]

ENTITY_REFERENCE_NODE

[/td]
    [td]

Nombre de la entidad referenciada

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

Notation

[/td]
    [td]

NOTATION_NODE

[/td]
    [td]

Nombre de la Notation

[/td]
    [td]

null

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

ProcessingInstruction

[/td]
    [td]

PROCESSING_INSTRUCTION_NODE

[/td]
    [td]

DEstino de la instrucción

[/td]
    [td]

Datos de la instrucción

[/td]
    [td]

null

[/td]
  [/tr]
  [tr]
    [td]

Text

[/td]
    [td]

TEXT_NODE

[/td]
    [td]

"#text"

[/td]
    [td]

Texto en si mismo

[/td]
    [td]

null

[/td]
  [/tr]
[/table]

Si queremos recuperar el texto contenido en un nodo (y en el conjunto de sus hijos) tendremos que usar el método getTextContent().

Para evitar cualquier ambigüedad durante el uso de Element, será mejor usar los métodos específicos de esta interfaz (leer [iurl=90&all=0&fs=904#911]Acceder al contenido y a los atributos de un Element[/iurl]).