Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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(); } } }
|