...
public static void mostrarAtr(Node node) {
if (node.getNodeType() == 1) //eh um elemento {
if (node.hasAttributes()){ Attr atr;
Int numAtr = node.getAttributes().getLength(); for (int i=0; i < numAtr; i++){
atr = (Attr)node.getAttributes().item(i); System.out.printl(atr.getName() + "=\"" + atr.getValue()); } } } ...
3.4.5 A Interface NodeList
A interface NodeList representa uma lista indexada de nós, cada nó da lista é associado a um índice que varia de zero até o tamanho da lista menos um (índice –1). Uma instância desta interface pode ser obtida através do método getChildNodes() que retorna a lista dos filhos de um nó. Para obter os itens e o tamanho de uma lista usamos os métodos item() e getLength(), respectivamente.
Listagem 3.14 – Interface NodeList
package org.w3c.dom;
public interface NodeList {
public Node item(int index); public int getLength(); }
O trecho de código abaixo ilustra como usar os métodos de NodeList para obter cada item de uma lista de filhos de um nó e acessar os nomes destes nós:
NodeList lista = node.getChildNodes(); for (int i=0; i < lista.getLength(); i++){
Node filho = lista.item(i);
System.out.println(filho.getNodeName()); ...
}
As alterações realizadas em um objeto NodeList refletem na árvore DOM. Por exemplo, se um nó da lista for removido, o mesmo nó será removido da árvore.
DOM Core
37
3.4.6 Outras Interfaces DOM
Além das interfaces anteriores, DOM define:
3.4.6.1 A Interface NamedNodeMap
É uma lista de nós com um nome anexado a eles. Ele aceita as mesmas propriedades e métodos de NodeList, mas também possui métodos especiais para acessar os nós pelo nome como mostra a Listagem 3.16.
Listagem 3.15 – Interface NamedNodeMap
public interface NamedNodeMap { public Node item(int index); public int getLength();
// para trabalhar com itens particulares da lista public Node getNamedItem(String name);
public Node setNamedItem(Node arg) throws DOMException; public Node removeNamedItem(String name)
throws DOMException;
public Node getNamedItemNS(String namespaceURI, String localName);
public Node setNamedItemNS(Node arg) throws DOMException; public Node removeNamedItemNS(String namespaceURI, String localName) throws DOMException;
}
3.4.6.2 A Interface ProcessingInstruction
Um objeto desta interface representa uma instrução de processamento. Ele é usado para guardar informações específicas de processador dentro de um documento XML. A assinatura dessa interface é mostrada na Listagem 3.14.
Uma instrução de processamento é dividia em duas partes: o alvo (targat) da instrução e o dado. Considerando a instrução de processamento mostrada abaixo:
<?xml-stylesheet type=”text/css” href=”saudacao.xml”?>
xml-stylesheet é o valor do alvo, e type=”text/css” href=”saudacao.xml” é o dado. Listagem 3.16 – Interface ProcessingInstruction
public interface ProcessingInstruction extends Node { public String getTarget();
public String getData();
public void setData(String data) throws DOMException; }
DOM Core
A interface ProcessingInstruction herda atributos e métodos de Node, e não tem filhos na árvore DOM.
3.4.6.3 A Interface CharacterData
É a interface que representa os dados de caracteres em DOM. Ela é base para as interfaces: Text, CDATASection e Comment. Ela herda atributos e métodos de Node e também define novos métodos como mostra a Listagem 3.17.
Listagem 3.17 – Interface CharacterData
public interface CharacterData extends Node { public String getData() throws DOMException;
public void setData(String data) throws DOMException; public int getLength();
public String substringData(int offset, int length) throws DOMException;
public void appendData(String data) throws DOMException; public void insertData(int offset, String data)
throws DOMException;
public void deleteData(int offset, int length) throws DOMException;
public void replaceData(int offset, int length, String data) throws DOMException;
}
3.4.6.4 A Interface Comment
É a interface descendente de CharacterData que representa o conteúdo de um comentário. Considerando o comentário abaixo:
<!-- Início do documento -->
o valor do nó Comment é a string Início do documento.
Um comentário é um nó folha na árvore DOM, o que significa que ele não pode ter filhos.
3.4.6.5 A Interface Text
A interface Text representa o conteúdo de texto de um nó elemento, atributo, ou referência de entidade. Ele é descendente do objeto CharacterData e também define o método splitText (int offset) que divide o nó em dois no deslocamento (offset) indicado.
DOM Core
39
3.4.6.6 A Interface CDATASection
Essa interface representa uma seção CDATA em um documento XML. Ele é descendente da interface Text e não acrescenta atributos nem métodos extras.
3.4.6.7 A Interface DocumentType
A interface DocumentType representa uma declaração de tipo de documento (DTD) ou um XML Schema. Ela possui os métodos mostrados na Listagem 3.18.
Uma DTD pode ter quatro partes: o nome do elemento raiz, o public ID, o system ID e a parte interna da DTD que fica entre [ e ]. Por exemplo, para a DTD abaixo:
<!DOCTYPE mml:math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd" [ <!ENTITY % MATHML.prefixed "INCLUDE">
<!ENTITY % MATHML.prefix "mml"> ]>
• elemento raiz é: mml:math
• public ID: -//W3C//DTD MathML 2.0//EN
• system ID: http://www.w3.org/TR/MathML2/dtd/mathml2.dtd
• subconjunto interno:
<!ENTITY % MATHML.prefixed "INCLUDE"> <!ENTITY % MATHML.prefix "mml">
Listagem 3.18 – Interface DocumentType
public interface DocumentType extends Node { public String getName();
public NamedNodeMap getEntities(); public NamedNodeMap getNotations(); public String getPublicId(); public String getSystemId(); public String getInternalSubset(); }
3.4.6.8 A Interface Entity
Representa uma entidade declarada com um elemento <!ENTITY...> na DTD. Ele é descendente de Node. O mapa das entidades declaradas em um documento é obtido pelo método getEntities() da interface DocumentType.
DOM Core
3.4.6.9 A Interface Notation
É um objeto descendente de Node que representa uma notação declarada em uma DTD ou XML Schema com o elemento <NOTATION...>. Como Entity, um objeto Notation não faz parte da árvore DOM. Diferente da interface Entity, a interface Notation não tem filhos.
3.4.6.10 A Interface EntityReference
Esta interface representa um nó referência de entidade dentro do documento XML. Os métodos e os atributos desse objeto são herdados de Node.
Uma referência de entidade pode fazer parte ou não da árvore DOM. Isso depende do parser utilizado. Caso o parser não valide o documento, a referência de entidade não será substituída pelo conteúdo referido, logo a árvore terá um nó EntityReference. Se o
parser é de validação, ele pode escolher entre substituir o conteúdo referenciado ou manter
a referência.
Para acessar o nome de uma referência de entidade é usado o método getNodeName() de Node. O seu conteúdo texto pode ser acessado por métodos como getFirstChild(). Entretanto, não é possível alterar os filhos de um objeto EntityReference ou o seu nome usando os métodos appendChild(), replaceChild() ou setNodeName().
3.4.6.11 A Interface DocumentFragment
Esta interface representa fragmentos de documento que podem ser criados para auxiliar nas operações de árvore DOM. Por exemplo, um novo fragmento de documento pode ser criado e elementos inseridos nele, depois todo o fragmento pode ser inserido em um documento existente. Os atributos e métodos desse objeto são herdados do objeto Node.
3.4.6.12 A Interface DOMImplementation
Esta interface é um abstract factory responsável por criar novos objetos Document e DocumentType. Além dos métodos create, ela define o método hasFeature() que é
DOM Core
41 utilizado para verificar se a implementação de DOM suporta determinada característica da versão de DOM indicada.