Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 482

Ильдар Шаукатович Хабибуллин

" col = " + ex.getColumnNumber());

}

public class TreeProcessDOM{

static final String JAXP_SCHEMA_MNGUAGE =

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

static final String W3C XML SCHEMA =

"";

public static void main(String[] args) throws Exception{ if (args.length != 3){

System.err.println("Usage: java TreeProcessDOM " + "<file-name>.xml {workjhome} <phone>");

System.exit(-1);

}

try{

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

System.err.println("HeH3BecTHoe свойство: " +

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 k = 0; k < n; k++){ thisNode = list.item(k);

String elemName = null;

if (thisNode.getFirstChild() instanceof Element){

elemName = (thisNode.getFirstChild()).getNodeName(); if (elemName.equals("name")){

if (!thisNode.hasAttributes()){

System.err.println("ATpH5yTbi отсутствуют " + elemName);

System.exit(1);

}

NamedNodeMap attrs = thisNode.getAttributes();

Node attr = attrs.getNamedItem("surname"); if (attr instanceof Attr)

if (((Attr)attr).getValue().equals("Сидорова")) break;

}

}

}

NodeList topics = ((Element)thisNode)

.getElementsByTagName("phone-list");

Node newNode;

if (args[1].equals("work"))

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. Именно так сделано на рис. 28.2. Для вывода применена программа DomEcho из электронного учебника "Web Services Tutorial". Исходный текст программы слишком велик, чтобы приводить его здесь, но его можно посмотреть по адресу tutorial.html. В состав парсера Xerces в качестве примера анализа документа в раздел samples/ui/ входит программа TreeView, которая тоже показывает дерево объектов в виде дерева JTree библиотеки Swing.

Другие DOM-парсеры

Модель дерева объектов DOM была первоначально разработана группой OMG (Object Management Group) в рамках языка IDL (Interface Definition Language) без учета особенностей Java. Только потом она была переведена на Java консорциумом W3C в виде интерфейсов и классов, составивших пакет org.w3c.dom. Этим объясняется, в частности, широкое применение в DOM API интерфейсов и фабричных методов вместо классов и конструкторов.

Данное неудобство привело к появлению других разработок.

Участники общественного проекта JDOM не стали реализовать модель DOM, а разработали свою модель дерева объектов, получившую название JDOM. Они выпускают одноименный свободно распространяемый программный продукт, с которым можно ознакомиться на сайте проекта . Этот продукт широко используется для обработки документов XML средствами Java.