Главная » Java, Web, XML » Интерфейс Element

0

добавляет к методам своего предка Node методы работы с атрибутами открывающего тега элемента XML и методы, позволяющие обратиться к вложенным элементам. Только один метод

public String getTagName () ;

дает сведения о самом элементе, а именно, имя элемента.

Прежде чем получить значение атрибута с именем name надо проверить его наличие методами

public boolean hasAttribute (string name);

public boolean hasAttributeNS (string uri, String name);

Второй из этих методов учитывает пространство имен с именем uri, записанным в виде строки URI; имя name должно быть полным, с префиксом.

Получить атрибут в виде объекта типа Attr или его значение в виде строки по имени name с учетом префикса или без него можно методами

public Attr getAttributeNode(String name);

public Attr getAttributeNodeNS (String uri, String name) ;

public String getAttribute (String name) ;

public String getAttributeNS (String uri, String name) ;

Удалить атрибут можно методами

public Attr removeAttributeNode (Attr name) ;

public void removeAttribute (String name) ;

public void removeAttributeNS (String uri, String name);

Установить значение атрибута можно методами

public void setAttribute (String name, String value) ;

public void setAttributeNS (String uri, String name, String value);

Добавить атрибут в качестве потомка можно методами public Attr setAttributeNode (String name) ; public Attr setAttributeNodeNS (Attr name) ;

Два метода позволяют получить список узлов-потомков:

public NodeList getElrmentsByTagName (String name) ;

public NodeList getElrmentsByTagNameNS (String uri, String name) ;

Итак, методы перечисленных интерфейсов позволяют перемещаться по дереву, менять структуру дерева, просматривать информацию, хранящуюся в узлах и листьях дерева и изменять ее.

Приведем пример работы с деревом объектов, построенным по документу XML. Добавим в адресную книжку листинга 1.2 новый рабочий или домашний телефон Сидоровой. Это действие записано в листинге 1.10.

Листинг 1.10. Анализ адресной книжки с помощью DOM API

import org.w3c.dom. *;

import

import org.xml.sax. *;

class ErrHand implements ErrorHandler{

public void warning(SAXParseException ex) {

System.err.println("Warning: " + ex) ; System.err.println("line = " + ex.getLineNurnber () + " col = " + ex.getColumnNumber());

}

public void error(SAXParseException ex){ System.err.println("Error: " + ex);

System.err.println("line = " + ex.getLineNumber() + " col = " + ex.getColumnNumber());

}

public void fatalError(SAXParseException ex){

System.err.println("Fatal error: " + ex);

= " + +

" col = " +

}

}

public class

static final String                   =

"http ://j ava. sun. com/xml/j axp/properties/ schemaLanguage";

static final String             =

"http://www.w3 .org/2001/XMLSchema"; public static void main (string [ ] args) throws Exception} if (args.length != 3) {

System.err.println("Usage: java TreeProcessDOM " +

"<file-mme>.xml {worklhome} <phone>"); System.exit(-1) ;

}

DocumentBuilderFactory fact =

DocumentBuilderFactory.newInstance() ; fact.setNamespaceAware(true); fact.setValidating(true);

try{

fact.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); }catch (IllegalArgumentException x) {

System.err.println("Неизвестное свойство: " +

JAXP_SCHEMA_LANGUAGE); System.exit(-1);

}

DocumentBuilder builder = fact.newDocumentBuilder();

builder.setErrorHandler(new ErrHand());

Document doc = builder.parse(args[0]);

NodeList list = doc.getElementsByTagName("notebook");

int n = list.getLength();

if (n == 0) {

System, err. println ("Документ пуст. ") ;

System.exit(-1);

}

Node thisNode = null;

for (int к = 0; к < n; k++) {

thisNode = list.item(k); String elemName = null;

if (thisNode.getFirstChild() instanceof Element) {

elemName = (thisNode.getFirstChild()).getNodeName();

if

if

System.err.println("Атрибуты отсутствуют " + elemName); System, exit(1);

}

attrs =

Node attr =

if (attr instanceo’f Attr)

if                                                   break;

}

}

}

NodeList topics = ( (Element)thisNode)

r

.getElementsByTagName("phone-list")

Node if

newNode = doc.createElement("work-phone"); else newNode = doc.createElement ("home-phone") ;

Text textNode = doc.createTextNode(args[2]);

newNode.appendChild(textNode) ;

thisNode.appendChild(newNode);

}

}

Дерево объектов можно вывести на экран дисплея, например, как дерево JTree — компонент графической библиотеки Swing [10]. Именно так сделано на рис. 1.2. Для вывода применена программа DomEcho из электронного учебника "Web Services Tutorial". Исходный текст программы слишком велик, чтобы приводить его здесь, но его можно посмотреть по адресу http://java.sun.com/webservices/tutorial.htmI. В состав парсера Xerces в качестве примера анализа документа в раздел                                                 входит программа которая тоже показывает дерево объектов в виде дерева JTree библиотеки Swing.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии