Книга: XSLT
Преобразования из XML в XML
Преобразования из XML в XML
Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml
содержит достаточно много данных о каждой планете:
<?xml version="1.0"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS="(Earth = 1)">.815</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">3716</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->
</PLANET>
.
.
.
Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных planets.xml
представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.
В листинге 1.6 приведена новая версия файла planets.xsl
, осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент <xsl:output>
, атрибут method
которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег <html>
, он обычно по умолчанию генерирует HTML).
Листинг 1.6. Выбор только имени и массы
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANET">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="MASS">
<xsl:copy>
<xsl:value-of select="."/>
<xsl:value-of select="@UNITS"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RADIUS"> </xsl:template>
<xsl:template match="DAY"> </xsl:template>
<xsl:template match="DENSITY"> </xsl:template>
<xsl:template match="DISTANCE"> </xsl:template>
</xsl:stylesheet>
Далее я применяю эту новую версию planets.xsl
к planets.xml
, используя Xalan, чтобы создать новый документ XML, new.xml
:
C:planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml
Вот как выглядит результирующий документ XML, new.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<PLANET>
<NAME>Mercury</NAME>
<MASS>.0553(Earth = 1)</MASS>
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS>.815(Earth = 1)</MASS>
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS>1(Earth = 1)</MASS>
</PLANET>
Отметьте, что этот файл выглядит во многом похоже на исходный файл planets.xml
, за тем исключением, что каждый элемент <PLANET>
содержит только элементы <NAME>
и <MASS>
. Таким образом, мы смогли получить подмножество данных первоначального документа XML.
Конечно, можно проводить любое число такого рода преобразований XML-XML. Можно обрабатывать данные в документе XML для создания совершенно новых XML-документов. Например, можно взять XML-документ с именами студентов и их отметками и создать новый документ, отображающий средние оценки. В XSLT есть много встроенных функций, позволяющих работать с данными подобным образом, — мы познакомимся с ними в главе 8.
В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.
- XSL = XSLT + XSL-FO
- Краткая историческая справка
- Документы XML
- Как XML выглядит в браузере?
- XSLT-преобразования
- Что нужно для XSLT-преобразования
- Использование отдельных процессоров XSLT
- Преобразование документов XML при помощи браузеров
- Работа с XSLT и JavaScript в Internet Explorer
- XSLT-преобразования на web-серверах
- Преобразования из XML в XML
- Преобразования из XML в XHTML
- Ресурсы XSLT
- Форматирующие объекты XSL: XSL-FO
- Форматирование документа XML
- Таблица стилей XSLT
- Преобразование документа в представление с форматирующими объектами
- Создание форматированного документа
- XML снаружи и изнутри
- Импорт MSXML в Delphi
- Символьные данные в XML-документах
- Ассоциация преобразования с XML-документом
- Преобразования из XML в XHTML
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Преобразование XML в реляционную базу данных
- 2.7 Преобразования типов
- Модификаторы спецификации преобразования, используемые в функции printf( )
- 2.16. Явные и неявные преобразования
- XMLHttpRequest
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet