|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
XMLStreamConstants.ENTITY_DECLARATION
Далее данные извлекаются применением методов: String getLocalName() – возвращает название тега; String getAttributeValue(NAMESPACE_URI, ATTRIBUTE_NAME) – возвращает значение атрибута; String getText() – возвращает текст тега. Пусть дан XML-документ с описанием медиатехники. <?xml version="1.0" encoding="UTF-8"?> <products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" products.xsd"> <category name="Audio And Video"> <subcategory name="Audio"> <product> <producer>Samsung</producer> <model>NV678</model> <year>12-12-2006</year> <color>White</color> <notAvailable /> </product> </subcategory> <subcategory name="Video"> <product> <producer>Samsung</producer> <model>VH500</model> <year>12-12-2004</year> <color>Black</color> <cost>200</cost> </product> <product> <producer>Samsung</producer> <model>VH500</model> <year>12-12-2004</year> <color>White</color> <notAvailable /> </product> </subcategory> </category> <category name="Computers"> <subcategory name="Pocket"> <product> <producer>HP</producer> <model>rx371</model> <year>31-01-2006</year> <color>Black</color> <notAvailable /> </product> </subcategory> </category> </products> Организация процесса разбора документа XML с помощью StAX приведена в следующем примере: /* пример # 12: реализация разбора XM-документа: StAXProductParser.java: ProductParser.java: ParserEnum.java */ package chapt16; public enum ParserEnum { PRODUCTS, CATEGORY, SUBCATEGORY, PRODUCT, PRODUCER, MODEL, YEAR, COLOR, NOTAVAILABLE, COST, NAME } package chapt16; import java.io.InputStream;
public abstract class ProductParser { public abstract void parse(InputStream input);
public void writeTitle() { System. out. println("Products:"); } public void writeCategoryStart(String name) { System. out. println("Category: " + name.trim()); } public void writeCategoryEnd() { System. out. println(); } public void writeSubcategoryStart(String name) { System. out. println("Subcategory: " + name.trim()); } public void writeSubcategoryEnd() { System. out. println(); } public void writeProductStart() { System. out. println(" Product Start "); } public void writeProductEnd() { System. out. println(" Product End "); } public void writeProductFeatureStart(String name) { switch (ParserEnum. valueOf (name.toUpperCase())) { case PRODUCER: System. out. print("Provider: "); break; case MODEL: System. out. print("Model: "); break; case YEAR: System. out. print("Date of issue: "); break; case COLOR: System. out. print("Color: "); break; case NOTAVAILABLE: System. out. print("Not available"); break; case COST: System. out. print("Cost: "); break; } } public void writeProductFeatureEnd() { System. out. println(); }
public void writeText(String text) { System. out. print(text.trim()); } } package chapt16; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.InputStream;
public class StAXProductParser extends ProductParser { // реализация абстрактного метода из суперкласса для разбора потока public void parse(InputStream input) { XMLInputFactory inputFactory = XMLInputFactory. newInstance (); try { XMLStreamReader reader = inputFactory.createXMLStreamReader(input); process(reader); } catch (XMLStreamException e) { e.printStackTrace(); } } // метод, управляющий разбором потока public void process(XMLStreamReader reader) throws XMLStreamException { String name;
while (reader.hasNext()) { // определение типа "прочтённого" элемента (тега) int type = reader.next();
switch (type) { case XMLStreamConstants. START_ELEMENT: name = reader.getLocalName();
switch (ParserEnum. valueOf (name.toUpperCase())) { case PRODUCTS: writeTitle(); break; case CATEGORY: writeCategoryStart(reader.getAttributeValue(null, ParserEnum. NAME. name().toLowerCase())); break; case SUBCATEGORY: writeSubcategoryStart(reader.getAttributeValue(null, ParserEnum. NAME. name().toLowerCase())); break; case PRODUCT: writeProductStart(); break; default: writeProductFeatureStart(name); break; } break;
case XMLStreamConstants. END_ELEMENT: name = reader.getLocalName();
switch (ParserEnum. valueOf (name.toUpperCase())) { case CATEGORY: writeCategoryEnd(); break; case SUBCATEGORY: writeSubcategoryEnd(); break; case PRODUCT: writeProductEnd(); break; default: writeProductFeatureEnd(); break; } break;
case XMLStreamConstants. CHARACTERS: writeText(reader.getText()); break;
default: break; } } } } Для запуска приложения разбора документа с помощью StAX ниже приведен достаточно простой код: /* пример # 13: запуск приложения: StreamOutputExample.java*/ package chapt16; import java.io.FileInputStream; import java.io.InputStream;
public class StreamOutputExample { public static void main(String[] args) throws Exception { ProductParser parser = new StAXProductParser(); // создание входного потока данных из xml-файла InputStream input = new FileInputStream("chapt16\\mediatech.xml"); // разбор файла с выводом результата на консоль parser.parse(input); } } XSL Документ XML используется для представления информации в виде некоторой структуры, но он никоим образом не указывает, как его отображать. Для того чтобы просмотреть XML-документ, нужно его каким-то образом отформатировать. Инструкции форматирования XML-документов формируются в так называемые таблицы стилей, и для просмотра документа нужно обработать XML-файл согласно этим инструкциям. Существует два стандарта стилевых таблиц, опубликованных W3C. Это CSS (Cascading Stylesheet) и XSL (XML Stylesheet Language). CSS изначально разрабатывался для HTML и представляет из себя набор инструкций, которые указывают браузеру, какой шрифт, размер, цвет использовать для отображения элементов HTML-документа. XSL более современен, чем CSS, потому что используется для преобразования XML-документа перед отображением. Так, используя XSL, можно построить оглавление для XML-документа, представляющего книгу. Вообще XSL можно разделить на три части: XSLT (XSL Transformation), XPath и XSLFO (XSL Formatting Objects). XSL Processor необходим для преобразования XML-документа согласно инструкциям, находящимся в файле таблицы стилей. XSLT Этот язык для описания преобразований XML-документа применяется не только для приведения XML-документов к некоторому “читаемому” виду, но и для изменения структуры XML-документа. К примеру, XSLT можно использовать для: · удаления существующих или добавления новых элементов в XML-документ; · создания нового XML-документа на основании заданного; · извлечения информации из XML-документа с разной степенью детализации; · преобразования XML-документа в документ HTML или документ другого типа. Пусть требуется построить новый XML-файл на основе файла <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/"> <students> <xsl:apply-templates /> </students> </xsl:template> <xsl:template match="student"> <xsl:element name="student"> <xsl:attribute name="faculty"> <xsl:value-of select="@faculty"/> </xsl:attribute> <name><xsl:value-of select="name"/></name> <xsl:element name="address"> <xsl:attribute name="country"> <xsl:value-of select="address/country"/> </xsl:attribute> <xsl:attribute name="city"> <xsl:value-of select="address/city"/> </xsl:attribute> <xsl:attribute name="street"> <xsl:value-of select="address/street"/> </xsl:attribute> <xsl:element name="telephone"> <xsl:attribute name="number"> <xsl:value-of select="telephone"/> </xsl:attribute> </xsl:element> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> Преобразование XSL лучше сделать более коротким, используя ATV (attribute template value), т.е «{}» <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/"> <students> <xsl:apply-templates /> </students> </xsl:template> <xsl:template match="student"> <student faculty=”{@faculty}"> <name><xsl:value-of select="name"/></name> <address country=”{address/country}" city=”{address/city}” street=”{address/street}”> <telephone number="{telephone}"/> </address> </student> </xsl:template> </xsl:stylesheet> Для трансформации одного документа в другой можно использовать, например, следующий код. /* пример # 14: трансформация XML: SimpleTransform.java */import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource;
public class SimpleTransform { public static void main(String[] args) { try { TransformerFactory tf = TransformerFactory. newInstance ();
//установка используемого XSL-преобразования Transformer transformer = tf.newTransformer(new StreamSource("students.xsl"));
//установка исходного XML-документа и конечного XML-файла transformer.transform( new StreamSource("students.xml"), new StreamResult("newstudents.xml"));
System. out. print("complete"); } catch (TransformerException e) { e.printStackTrace(); } } } В результате получится XML-документ newstudents.xml следующего вида: <?xml version="1.0" encoding="UTF-8"?> <students> <student faculty="mmf"> <name>Mitar Alex</name> <address country="Belarus" city="Minsk" street="Kalinovsky 45"> <telephone number="3462356"/> </address> </student> <student faculty="mmf"> <name>Pashkun Alex</name> <address country="Belarus" city="Brest" street="Knorina 56"> <telephone number="4582356"/> </address> </student> </students> Элементы таблицы стилей Таблица стилей представляет собой well-formed XML-документ. Эта таблица описывает изначальный документ, конечный документ и то, как трансформировать один документ в другой. Какие же элементы используются в данном листинге? <xsl:output method="xml" indent="yes"/> Данная инструкция говорит о том, что конечный документ, который получится после преобразования, будет являться XML-документом. <xsl:template match="student"> <lastname> <xsl:apply-templates/> </lastname> </xsl:template> Инструкция <xsl:template...> задает шаблон преобразования. Набор шаблонов преобразования составляет основную часть таблицы стилей. В предыдущем примере приводится шаблон, который преобразует элемент student в элемент lastname. Шаблон состоит из двух частей: 1) параметр match, который задает элемент или множество элементов в исходном дереве, где будет применяться данный шаблон; 2) содержимое шаблона, которое будет вставлено в конечный документ. Нужно отметить, что содержимое параметра math может быть довольно сложным. В предыдущем примере просто ограничились именем элемента. Но, к примеру, следующее содержимое параметра math указывает на то, что шаблон должен применяться к элементу url, содержащему атрибут protocol со значением mailto: <xsl:template match=”url[@protocol=’mailto’]”> Кроме этого, существует набор функций, которые также могут использоваться при объявлении шаблона: <xsl:template match=”chapter[position()=2]”> Данный шаблон будет применен ко второму по счету элементу chapter исходного документа. Инструкция <xsl:apply-templates/> сообщает XSL-процессору о том, что нужно перейти к просмотру дочерних элементов. Эта запись означает в расширенном виде: <xsl:apply-templates select=”child::node()” /> XSL-процессор работает по следующему алгоритму. После загрузки исходного XML-документа и таблицы стилей процессор просматривает весь документ от корня до листьев. На каждом шагу процессор пытается применить к данному элементу некоторый шаблон преобразования; если в таблице стилей для текущего просматриваемого элемента есть шаблон, процессор вставляет в результирующий документ содержимое этого шаблона. Когда процессор встречает инструкцию <xsl:apply-templates/>, он переходит к дочерним элементам текущего узла и повторяет процесс, т.е. пытается для каждого дочернего элемента найти соответствие в таблице стилей. Задания к главе 16 Вариант А Создать файл XML и соответствующее ему DTD-определение. Задать схему XSD. Определить класс Java, соответствующий данному описанию. Создать Java-приложение для инициализации массива объектов информацией из XML-файла. Произвести проверку XML-документа с привлечением DTD и XSD. Определить метод, производящий преобразование данного XML-документа в документ, указанный в задании. 1. Оранжерея. Растения, содержащиеся в оранжерее, имеют следующие характеристики: · Name – название растения. · Soil – почва для посадки, которая может быть следующих типов: подзолистая, грунтовая, дерново-подзолистая. · Origin – место происхождения растения. · Visual рarameters (должно быть несколько) – внешние параметры: цвет стебля, цвет листьев, средний размер растения. · Growing tips (должно быть несколько) – предпочитаемые условия произрастания: температура (в градусах), освещение (светолюбиво либо нет), полив (мл в неделю). · Multiplying – размножение: листьями, черенками либо семенами. Корневой элемент назвать Flower. Создать XML файл, отображающий заданную тему, привести примеры 4-5 растений. С помощью XSL преобразовать данный файл в формат HTML, где отобразить растения по предпочитаемой температуре (по возрастанию). 2. Алмазный фонд. Драгоценные и полудрагоценные камни, содержащиеся в павильоне, имеют следующие характеристики: · Name – название камня. · Preciousness – может быть драгоценным либо полудрагоценным. · Origin – место добывания. · Visual parameters (должно быть несколько) – могут быть: цвет (зеленый, красный, желтый и т.д.), прозрачность (измеряется в процентах · Value – вес камня (измеряется в каратах). Корневой элемент назвать Gem. Создать XML файл, отображающий заданную тему, привести примеры 4-5 камней. С помощью XSL преобразовать данный файл в формат XML, где корневым элементом будет место происхождения. 3. Тарифы мобильных компаний. Тарифы мобильных компаний могут иметь следующую структуру: · Name – название тарифа. · Operator name – название сотового оператора, которому принадлежит тариф. · Payroll – абонентская плата в месяц (0 – n рублей). · Сall prices (должно быть несколько) – цены на звонки: внутри сети · SMS price – цена за смс (0 – n рублей). · Parameters (должно быть несколько) – наличие любимого номера Корневой элемент назвать Tariff. Создать XML файл, отображающий заданную тему, привести примеры 4-5 тарифов. С помощью XSL преобразовать данный файл в формат НTML, при выводе отсортировать тарифы по абонентской плате. 4. Лекарственные препараты. Лекарственные препараты имеют следующие характеристики. · Name – название препарата. · Price – цена за упаковку (0 – n рублей). · Dosage – дозировка препарата (мг/день). · Visual (должно быть несколько) – визуальные характеристики препарата: цвет (белый, желтый, зеленый, красный), консистенция (жидкий, порошкообразный, твердый), показания к применению (респираторные заболевания, расстройства организма, психические заболевания, общеукрепляющее). Корневой элемент назвать Medicine. Создать XML файл, отображающий заданную тему, привести примеры 4-5 лекарств. С помощью XSL преобразовать данный файл в формат НTML, при выводе отсортировать лекарства по цене. 5. Компьютер. Компьютерные комплектующие имеют следующие характеристики: · Name – название комплектующего. · Origin – страна производства. · Price – цена (0 – n рублей). · Type (должно быть несколько) – периферийное либо нет, энергопотребление (ватт), наличие кулера (есть либо нет), группа комплектующих (устройства ввода-вывода, мультимедийные), порты (COM, USB, LPT). · Critical – критично ли наличие комплектующего для работы компьютера. Корневой элемент назвать Device. Создать XML файл, отображающий заданную тему, привести примеры 4-5 устройств. С помощью XSL преобразовать данный файл в формат XML, при выводе корневым элементом сделать Critical. 6. Огнестрельное оружие. Огнестрельное оружие можно структурировать по следующей схеме: · Model – название модели. · Handy – одно- или двуручное. · Origin – страна производства. · TTC (должно быть несколько) – тактико-технические характеристики: дальнобойность (близкая [0 – 500м], средняя [500 – 1000 м], дальняя [1000 – n метров]), прицельная дальность (в метрах), наличие обоймы, наличие оптики. · Material – материал изготовления. Корневой элемент назвать Gun. Создать XML файл, отображающий заданную тему, привести примеры 4-5 видов. С помощью XSL преобразовать данный файл в формат XML, при выводе корневым элементом сделать страну производства. 7. Холодное оружие. Холодное оружие можно структурировать по следующей схеме: · Type – тип (нож, кинжал, сабля и т.д.). · Handy – одно или двуручное. · Origin – страна производства. · Visual (должно быть несколько) – визуальные характеристики: клинок (длина клинка [10 – n см], ширина клинка [10 – n мм]), материал (клинок [сталь, чугун, медь и т.д.]), рукоять (деревянная [если да, то указать тип дерева], пластик, металл), наличие кровостока (есть либо нет). · Value – коллекционный либо нет. Корневой элемент назвать Knife. Создать XML файл, отображающий заданную тему, привести примеры 4-5 видов. С помощью XSL преобразовать данный файл в формат HTML, при выводе отсортировать по длине клинка. 8. Военные самолеты. Военные самолеты можно описать по следующей схеме: · Model – название модели. · Origin – страна производства. · Chars (должно быть несколько) – характеристики, могут быть следующими: тип (самолет поддержки, сопровождения, истребитель, перехватчик, разведчик), кол-во мест (1 либо 2), боекомплект (есть либо нет [разведчик], если есть, то: ракеты [0 – 10]), наличие радара. · Parameters – длина (в метрах), ширина (в метрах), высота (в метрах). · Price – цена (в долларах). Корневой элемент назвать Plane. Создать XML файл, отображающий заданную тему, привести примеры 4-5 типов самолетов. С помощью XSL преобразовать данный файл в формат HTML, при выводе отсортировать по стоимости. 9. Конфеты. · Name – название конфеты. · Energy– калорийность (ккал). · Type (должно быть несколько) – тип конфеты (карамель, ирис, шоколадная [с начинкой либо нет]). · Ingredients (должно быть несколько) – ингредиенты: вода, сахар (в мг), фруктоза (в мг), тип шоколада (для шоколадных), ванилин (в мг) · Value – пищевая ценность: белки (в гр.), жиры (в гр.) и углеводы (в гр.). · Production – предприятие-изготовитель. Корневой элемент назвать Candy. Создать XML файл, отображающий заданную тему, привести примеры 4-5 конфет. С помощью XSL преобразовать данный файл в формат HTML, при выводе отсортировать по месту изготовления. 10. Пиво. · Name – название пива. · Type – тип пива (темное, светлое, лагерное, живое). · Al – алкогольное либо нет. · Manufacturer – фирма-производитель. · Ingredients (должно быть несколько) – ингредиенты: вода, солод, хмель, сахар и т.д. · Chars (должно быть несколько) – характеристики: кол-во оборотов (если алкогольное), прозрачность (в процентах), фильтрованное либо нет, пищевая ценность (ккал), способ разлива (объем и материал емкостей) · Корневой элемент назвать Beer. Создать XML-файл, отображающий заданную тему, привести примеры 4-5 сортов пива. С помощью XSL преобразовать данный файл в формат XML, при выводе корневым элементом сделать производителя. 11. Периодические издания. · Title – название издания. · Type – тип издания (газета, журнал, буклет). · Monthly – ежемесячное либо нет. · Chars (должно быть несколько) – характеристики: цветное (да либо нет), объем (n страниц), глянцевое (да [только для журналов и буклетов] либо нет [для газет]), имеет подписной индекс (только для газет и журналов). Корневой элемент назвать Paper. Создать XML файл, отображающий заданную тему, привести примеры 4-5 типов периодики. С помощью XSL преобразовать данный файл в формат XML, при выводе корневым элементом сделать тип (Type). 12. Интернет-страницы. · Title – название страницы. · Type – тип страницы (рекламный, страница новостей, портал, зеркало). · Chars (должно быть несколько) – наличие электронного ящика (только для порталов, зеркал и страниц новостей), наличие новостей (только для страниц новостей), наличие архивов для выкачивания (только для зеркал), наличие голосования (есть[если есть, то анонимное либо с применением авторизации] либо нет), платный (информация, до- · Authorize – необходима либо нет авторизация. Корневой элемент назвать Site. Создать XML файл, отображающий заданную тему, привести примеры 4-5 типов периодики. С помощью XSL преобразовать данный файл в формат XML, при выводе корневым элементом сделать тип (Type). Тестовые задания к главе 16 Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.056 сек.) |