Содержание
-
Лекция 12.Работа с XML-данными в Java
-
XML – Extensible Markup Language
Для чего нужен: Интеграция данных из различных источников Локальная обработка данныхна клиенте. Просмотр и манипулирование данными в различных разрезах. Возможность частичного обновления данных.
-
XML. Конструкции языка
Элементы данных Элементами могут выступать как обычный текст, так и другие, вложенные, элементы документа, секции CDATA, инструкции по обработке, комментарии. Например: Siberia
родной университет -
Well-formed XML
Каждый открывающий тэг, определяющий некоторую область данных в документе обязательно должен иметь своего закрывающего "напарника“. В XML учитывается регистр символов. Все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки. Вся информация, располагающаяся между начальным и конечными тэгами, рассматривается в XML как данные и поэтому учитываются все символы форматирования ( т.е. пробелы, переводы строк, табуляции не игнорируются, как в HTML). Документ должен иметь только один элемент верхнего уровня (элемент Документ или корневой элемент). Все другие элементы должны быть вложены в элемент верхнего уровня.
-
XML. Конструкции языка
Комментарии Cпециальные символы < , > " или $(десятичная форма записи), Атрибуты - имя должно начинаться с буквы или символа подчеркивания (_), после чего могут следовать или не следовать другие буквы, цифры, символы точки (.), тире (–) или подчеркивания; - каждое имя атрибута может только один раз присутствовать в одном и том же начальном теге или в теге пустого элемента. Например: - правильно - неправильно
-
XML. Атрибуты
строка может быть заключена как в одинарные ('), так и в двойные кавычки ("); строка не может содержать внутри себя тот же символ кавычек, которыми она ограничена; строка может содержать ссылку на символ или ссылку на внутренние примитивы общего назначения; строка не может содержать символ < (Синтаксический анализатор может воспринять этот символ как начало описания XML-разметки.) строка не может содержать символ &, если это не ссылка на символ или примитив.
-
XML. Конструкции языка
Директивы анализатора CDATA Необходима чтобы задать область документа, которую при разборе анализатор будет рассматривать как простой текст, игнорируя любые инструкции и специальные символы, но, в отличии от комментариев, иметь возможность использовать их в приложении. DTD (Document Type Definition) Содержит правила, описывающие структуру документа Документ автоматически проверятся на соответствие этим правилам Описывает дочерние элементы и атрибуты для каждого элемента
-
Valid XML
Document Type Definition может быть описан в документе или во внешнем файле: ]>
-
XML Schema
Schema Предназначена для того же что и DTD Для описания правил используется XML Более гибкие возможности, чем у DTD Сложнее в восприятии и создании средств её обработки <страна xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="country.xsd"> <название>Франция <население>59.7
-
Пример. Входные данные
Есть xml-документ: Nikolaj Ivanov 23 PF-11 Petr Kilkin 22 FP-22 Petr Taranov 43 FP-33
-
Пример. Желанный результат
Student: name: Nikolaj surname: Ivanov age: 23 group: PF-11 Student: name: Petr surname: Kilkin age: 22 group: FP-22 Student: name: Petr surname: Taranov age: 43 group: FP-33
-
Разбор XML документов
XML парсеры: DOM-парсер (Document Object Model) – предварительно анализируется XML-документ и сохраняется дерево элементов XML в оперативной памяти. Требователен к ресурсам. SAX-парсер (Simple API for XML) — парсер, основывающийся на событиях (event-based). Быстр, за счет разбора только конкретной части документа.Занимает мало памяти.
-
SAX API
SAX API (на примере org.xml.sax) Представляет следующие интерфейсы для манипулирования XML: ContentHandler – ключевой интерфейс. Вызывая различные методы интерфейса XMLReader сообщает приложению о содержимом разбираемого документа DTDHandler – определяет методы которые используются для получения от XMLReader информации о нотации и необрабатываемых обьявлениях сущностей в DTD документа. ErrorHandler – используется для генерации ридером предупреждений, ошибке или неисправимой ошибке. InputSource – описывает источник входных данных: поток байт или символов, файл и т.п. откуда парсеру считывать документ. XMLReader – основной интерфейс содержащий методы парсера реализованые в других классах, таких как SAXParser или SAXParcerFactory Пакет org.xml.sax.helpers – содержит вспомогательные классы необходимые при работе с SAX-парсерами: DefaultHandler, XMLReaderFactory, XMLReaderImpl, ParserAdapter.
-
Пример. SAX-парсинг
importjavax.xml.parsers.*; importorg.xml.sax.*; importjava.io.IOException; publicclassSAXExampleextendsorg.xml.sax.helpers.DefaultHandler{ publicvoid process(String filename) throwsSAXException, IOException, ParserConfigurationException { SAXParserFactory.newInstance(). newSAXParser().parse(filename, this); } publicstaticvoid main(String[] args) throwsException { newSAXExample().process(args[0]); } ...
-
Пример. SAX-парсинг. Продолжение
... privateint level = 0; privateboolean inStudent = false; privateStringBuffer text = newStringBuffer(); @Override publicvoid startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { level++; if (level == 2 && qName.equals("student")) { inStudent = true; System.out.println("Student:"); } text.setLength(0); } @Override publicvoid characters(char[] ch, int start, int length) throws SAXException { text.append(ch, start, length); } @Override publicvoid endElement(String uri, String localName, String qName) throws SAXException { if (level == 3 && inStudent) System.out.println(" "+ qName +": "+ text); if (level == 2) inStudent = false; level--; }
-
DOM API
DOM API (на примере org.w3c.dom) Представляет следующие интерфейсы: Node – представляет произвольный элемент дерева (включая текст и атрибуты). Document – представляет документ DOMи служит корнем дерева документа. DocumentType – данный интерфейс представляет DTD документа Element – представляет элемент (тэг) документа, который может иметь подузлы. DocumentFragment – представляет часть (или фрагмент) документа, один или несколько смежных узлов со всеми подэлементами. CDATASection – представляет раздел CDATA. NodeList – представляет упорядоченное множество узлов предназначенных только для чтения. DOMException – при порождении ошибки API DOM создается экземпляр данного класса
-
Пример. DOM-парсинг
import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.*; import java.io.IOException; publicclass DOMExample { publicstatic Document parse(String filename) throws ParserConfigurationException, SAXException, IOException { return DocumentBuilderFactory.newInstance(). newDocumentBuilder().parse(filename); } publicstaticvoid main(String[] args) throwsException { Document doc = parse(args[0]); NodeList items = doc.getDocumentElement().getChildNodes(); for (int i = 0; i < items.getLength(); i++) if (items.item(i).getNodeName().equals("student")) printStudent(items.item(i)); } privatestaticvoid printStudent(Node node) { System.out.println("Student:"); NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) if (nodes.item(i).getNodeType() == Node.ELEMENT_NODE) System.out.println(" "+ nodes.item(i).getNodeName() + ": "+ nodes.item(i).getFirstChild().getNodeValue()); } }
-
XSL – eXtensible Stylesheet Language
XSLT – трансформации. XML документ, описывающий способ преобразования одного XML документа в другой (не обязательно XML) документ. Пространство имен http://www.w3.org/1999/XSL/Transform. XPath – язык запросов к XML документу. Состоит из пути к элементу в дереве или вызов функции, результатом запроса будет набор всех элементов, соответствующих пути.
-
XSLT – eXtensible Stylesheet Language Transformations
... body ...... body ... ... ......
-
XPath
Пример: /html/body/*/span[@name="span1"Равнозначно: /child::html/child::body/child::*/child::span[attribute::name="span1"] Оси:ancestor, ancestor-or-self, attribute (@),child (нет), descendant, descendant-or-self (//), following, following-sibling, namespace, parent (..), preceding, preceding-sibling, self (.) Функции:document, format-number, node, text, current, position, last, count, id, sum Примеры: node//li[last()] ../text() /root/@attribute //book[price > 20] document($path)/root/node
-
Пример. XSLT-преобразование
Student: : -
Пример. XSLT-преобразование из Java
import javax.xml.transform.*; import javax.xml.transform.stream.*; import java.io.*; publicclass TransformXML { publicstaticvoid main(String[] args) throws TransformerException, IOException, TransformerConfigurationException { TransformerFactory.newInstance(). newTransformer(new StreamSource(args[0])). transform( new StreamSource(args[1]), new StreamResult(System.out)); } }
-
Флэнаган Д. Java. Справочник, 4-е издание Пер. с англ. –СПб: Символ-Плюс, 2004.-1040с. http://intuit.ru, курс “Основы XML” http://www.java-tips.org/java-se-tips/java.lang.reflect/ http://j2w.blogspot.com/2008/01/xml-dom.html http://java.sun.com/docs/books/tutorial/reflect/class/index.html http://www.w3schools.com Bruce Eckel. Thinking in Java 2. 2000.
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.