Изучаем Java EE 7 - [189]
Для обеспечения обработки ошибок во время анализа XML документа ErrorHandler может быть зарегистрирован в SAXReader. Методы интерфейса ErrorHandler (warning, error и fatalError) вызываются в ответ на различные типы ошибок анализа.
Интерфейс DTDHandler определяет методы для обработки событий, связанных с DTD. Анализатор использует DTDHandler, чтобы передать нотацию и непроанализированные объявления сущности приложению. При обработке DTD полезно распознать и действовать соответственно объявлениям непроанализированных сущностей.
JAXP и DOM
JAXP предоставляет интерфейсы для анализа и изменения XML-данных с использованием DOM API. Точкой входа является класс javax.xml.parsers.DocumentBuilderFactory. Он используется для производства объекта типа DocumentBuilder, как показано в листинге 12.5. Используя один из методов parse класса DocumentBuilder, вы можете создать древовидную структуру XML-данных в объекте типа org.w3c.dom.Document. Дерево содержит узлы дерева (например, элементы и текстовые узлы), которые являются реализациями интерфейса org.w3c.dom.Node. Кроме того, чтобы создать объект документа, вы можете использовать метод newDocument() объекта типа DocumentBuilder.
>public class DomParsing {
>··public List
>····List
>····try {
>······File xmlDocument = Paths.get("src/main/resources/order.xml"). toFile();
>······// Фабрика DOM
>······DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
>······// Анализ документа
>······DocumentBuilder documentBuilder = factory.newDocumentBuilder();
>······Document document = documentBuilder.parse(xmlDocument);
>······// Получение узла order_line
>······NodeList orderLinesNode = document.getElementsByTagName("order_line");
>······for (int i = 0; i < orderLinesNode.getLength(); i++) {
>········Element orderLineNode = (Element) orderLinesNode.item(i);
>········OrderLine orderLine = new OrderLine();
>········orderLine.setItem(orderLineNode.getAttribute("item"));
>········orderLine.setQuantity(Integer.valueOf(orderLineNode.getAttribute("quantity")));
>········Node unitPriceNode = orderLineNode.getChildNodes(). item(1);
>········orderLine.setUnitPrice(Double.valueOf(unitPriceNode.getFirstChild(). getNodeValue()));
>··········orderLines.add(orderLine);
>······}
>····}··catch (SAXException | IOException | ParserConfigurationException e) {
>······e.printStackTrace();
>····}
>····return orderLines;
>··}
>}
В данном примере анализируется документ order.xml, в результате чего в памяти создается его древовидное представление. Благодаря многочисленным методам Document вы можете получить список узлов order_Line или атрибут quantity (например, GetAttribute("quantity")), чтобы создать объект OrderLine.
Как упоминалось ранее, можно переопределить стандартный для платформы анализатор DOM, установив соответствующим образом системное свойство javax.xml.parsers.DocumentBuilderFactory.
JAXP и XSLT
JAXP также используется для преобразования XML-документов с помощью XSLT API. XSLT взаимодействует с XML-ресурсами для трансформации источника XML в результирующий XML-документ с помощью преобразования стилей (см. листинг 12.3).
В листинге 12.6 принимается документ order.xml (см. листинг 12.1) и преобразуется в HTML-страницу с помощью XSLT, определенной выше (см. листинг 12.3). Сначала код использует метод newInstance() класса javax.xml.transform.TransformerFactory для создания экземпляра класса TransformerFactory. Затем он вызывается метод newTransformer() для создания нового преобразователя XSLT. Тогда он трансформирует документ order.xml в результирующую HTML-страницу.
>public class XsltTransforming {
>··public String transformOrder() {
>····StringWriter writer = new StringWriter();
>····try {
>······File xmlDocument = Paths.get("src/main/resources/order.xml"). toFile();
>······File stylesheet = Paths.get("src/main/resources/order.xsl"). toFile();
>······TransformerFactory factory =
>········TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
>······// Преобразование документа
>······Transformer transformer = factory.newTransformer(new StreamSource(stylesheet));
>······transformer.transform(new StreamSource(xmlDocument), new StreamResult(writer));
>····}··catch (TransformerException e) {
>······e.printStackTrace();
>····}
>····return writer.toString();
>··}
>}
Архитектура Java для связывания XML
Java предлагает различные способы манипулирования XML: от общих API, которые поставляются с JDK, таких как javax.xml.stream.XMLStreamWriter и java.beans.XMLEncoder, до более сложных и низкоуровневых моделей, таких как SAX, DOM или JAXP.
Спецификация (JSR 222) архитектуры Java для связывания XML (JAXB) обеспечивает более высокий уровень абстракции, чем SAX или DOM, и основана на аннотациях. JAXB определяет стандарт связывания представлений Java с XML и наоборот. Это позволяет работать с объектами Java, которые представляют XML-документы.
В листинге 12.7 представлен простой класс CreditCard с аннотацией JAXB @javax.xml.bind.annotation.XmlRootElement. JAXB свяжет объект типа CreditCard с XML.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.