Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Org.w3c.dom.Node






Основным объектом DOM является Node — некоторый общий элемент дерева.

Большинство DOM-объектов унаследовано именно от Node. Для представления элементов, атрибутов, сущностей разработаны свои специализации Node.

Интерфейс Node определяет ряд методов, которые используются для работы с деревом:

short getNodeType() — возвращает тип объекта (элемент, атрибут, текст, CDATA и т. д.);

String getNodeValue() — возвращает значение Node;

Node getParentNode() — возвращает объект, являющийся родителем текущего узла Node;

NodeList getChildNodes() — возвращает список объектов, являющихся дочерними элементами;

NamedNodeMap getAttributes() — возвращает список атрибутов данного элемента.

У интерфейса Node есть несколько важных наследников — Element, Attr, Text. Они используются для работы с конкретными объектами дерева.

org.w3c.dom.Element

Интерфейс предназначен для работы с элементом XML-документа и его содержимым. Некоторые методы:

String getTagName(String name) — возвращает имя элемента;

boolean hasAttribute() — проверяет наличие атрибутов;

String getAttribute(String name) — возвращает значение атрибута по его имени;

Attr getAttributeNode(String name) — возвращает атрибут по его имени;

NodeList getElementsByTagName(String name) — возвращает список дочерних элементов с определенным именем.

org.w3c.dom.Attr

Интерфейс служит для работы с атрибутами элемента XML-документа.

Некоторые методы интерфейса Attr:

String getName() — возвращает имя атрибута;

Element getOwnerElement() — возвращает элемент, который содержит этот атрибут;

String getValue() — возвращает значение атрибута;

boolean isId() — проверяет атрибут на тип ID.

 

StAX

StAX (Streaming API for XML), который еще называют pull-парсером, включен в JSDK, начиная с версии Java 6. Он похож на SAX отсутствием объектной модели в памяти и последовательным продвижением по XML, но в StAX не требуется реализация интерфейсов, и приложение само указывает StAX- парсеру перейти к следующему элементу XML. Кроме того, в отличие от SAX, данный парсер предлагает API для создания XML-документа.

Основными классами StAX являются XMLInputFactory, XMLStreamReader и XMLOutputFactory, XMLStreamWriter, которые, соответственно, используются для чтения и создания XML-документа и расположены в пакете javax.xml.stream. Для чтения XML требуется получить ссылку на экземпляр XMLStreamReader:

StringReader input = new StringReader(fileName); // из пакета java.io

или

InputStream input = new FileInputStream(new File(fileName));

далее

XMLInputFactory inputFactory = XMLInputFactory.newInstance();

XMLStreamReader reader = inputFactory.createXMLStreamReader(input);

после чего по экземпляру XMLStreamReader можно организовать навигацию аналогично интерфейсу Iterator, используя методы hasNext() и next():

boolean hasNext() — показывает, есть ли еще элементы;

int next() — переходит к следующей вершине-константе XML, извлекая тип текущей.

При попытке вызове на константе несоответствующего ей метода генерируется исключительная ситуация IllegalStateException.

Чаще всего данные извлекаются с применением методов:

String getLocalName() — возвращает название тега (элемента) для текущей константы;

String getAttributeValue(String namespaceURI, String localName) — возвращает значение атрибута по имени;

String getAttributeValue(inе index) — возвращает значение атрибута по номеру позиции;

String getText() — возвращает текст для констант CHARACTERS, CDATA, COMMENT и др.

Возможные типы вершин и методы, применимые к ним (см. таблицу 1).

Таблица 1 - Типы вершин-констант Методы

 

Создание XML–документа

Документы можно не только читать, но также модифицировать и создавать совершенно новые.

 

Рассмотрим пример, который демонстрирует создание XML-документа и запись его в файл различными способами. Для работы необходимо создать XML-документ test.xml:

 

<? xml version=" 1.0"? >

< bsac>

< students>

< student>

< firstname> Василий< /firstname>

< lastname> Иванов< /lastname>

< class> СП441< /class>

< /student>

< student>

< firstname> Василий< /firstname>

< lastname> Иванов< /lastname>

< class> СП442< /class>

< /student>

< /students>

< teachers>

< teacher>

< firstname> Иван< /firstname>

< lastname> Петров< /lastname>

< salary> 10000000< /salary>

< /teacher>

< /teachers>

< /bsac>

Затем программируйте:

package by.bsac.practical8;

 

import org.xml.sax.InputSource;

 

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.io.*;

/*

Чтение XML документа, используя SAX парсер

*/

public class TestSAXXMLParser {

 

public static void main(String[] args) {

InputStream inputStream = null;

Reader reader = null;

try {

 

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParser = factory.newSAXParser();

TestDefaultHandler handler = new TestDefaultHandler();

 

inputStream = new FileInputStream(" /home/home/Documents/test.xml");

reader = new InputStreamReader(inputStream, " UTF-8");

 

InputSource is = new InputSource(reader);

is.setEncoding(" UTF-8");

 

saxParser.parse(is, handler);

 

 

} catch (Exception e) {

e.printStackTrace();

}

finally {

if (reader! = null) {

try {

reader.close();

} catch (Exception e) {

System.out.println(" Error closing InputStreamReader: " + e);

}

}

if (inputStream! = null) {

try {

inputStream.close();

} catch (Exception e) {

System.out.println(" Error closing FileInputStream: " +e);

}

}

}

}

}

package by.bsac.practical8;

 

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.w3c.dom.Node;

import org.w3c.dom.Element;

import java.io.File;

/*

Чтение XML документа, используя DOM парсер

*/

public class TestDOMXMLParser {

public static Integer totalStudents = 0;

public static Integer totalTeacher = 0;

 

public static void main(String argv[]) {

try {

 

File fXmlFile = new File(" /home/home/Documents/test.xml");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(fXmlFile);

 

//optional, but recommended

doc.getDocumentElement().normalize();

 

System.out.println(" Root element: " + doc.getDocumentElement().getNodeName());

 

NodeList nList = doc.getElementsByTagName(" student");

 

System.out.println(" ----------------------------");

totalStudents = nList.getLength();

for (int temp = 0; temp < nList.getLength(); temp++) {

 

Node nNode = nList.item(temp);

 

System.out.println(" \nCurrent Element: " + nNode.getNodeName());

 

if (nNode.getNodeType() == Node.ELEMENT_NODE) {

 

Element eElement = (Element) nNode;

 

System.out.println(" First Name: " + eElement.getElementsByTagName(" firstname").item(0).getTextContent());

System.out.println(" Last Name: " + eElement.getElementsByTagName(" lastname").item(0).getTextContent());

System.out.println(" Class: " + eElement.getElementsByTagName(" class").item(0).getTextContent());

 

}

}

System.out.println(" Students total count: " + totalStudents);

totalStudents = 0;

 

nList = doc.getElementsByTagName(" teacher");

 

System.out.println(" ----------------------------");

totalTeacher = nList.getLength();

for (int temp = 0; temp < nList.getLength(); temp++) {

 

Node nNode = nList.item(temp);

 

System.out.println(" \nCurrent Element: " + nNode.getNodeName());

 

if (nNode.getNodeType() == Node.ELEMENT_NODE) {

 

Element eElement = (Element) nNode;

 

System.out.println(" First Name: " + eElement.getElementsByTagName(" firstname").item(0).getTextContent());

System.out.println(" Last Name: " + eElement.getElementsByTagName(" lastname").item(0).getTextContent());

System.out.println(" Salary: " + eElement.getElementsByTagName(" salary").item(0).getTextContent());

 

}

}

System.out.println(" Teachers total count: " + totalTeacher);

totalTeacher = 0;

} catch (Exception e) {

e.printStackTrace();

}

}

}


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.019 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал