• Nenhum resultado encontrado

...

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.