XSLT
Шрифт:
При использовании атрибута
doctype-system
процессор создает объявление типа документа непосредственно перед первым элементом. В этом случае имя, следующее за <!DOCTYPE>
, будет именем корневого элемента. Заметьте, что если вы также используете атрибут doctype-public
, процессор XSLT выведет «PUBLIC
», вслед за ним открытый идентификатор и затем системный идентификатор. Если вы не используете атрибут doctype-public
, процессор выведет «SYSTEM
» и вслед за ним системный идентификатор. Теоретически атрибут doctype-public
должен игнорироваться, если не задан также атрибут doctype-system
, хотя большинство процессоров, кажется, не следуют этому правилу. Мы увидим, как работать с атрибутами doctype-public
и doctype-system
в этой главе при преобразовании XML в XHTML. Наконец, для метода вывода XML значением по умолчанию для атрибута
media-type
является «text/xml
». Вы уже встречали в этой книге многие XML-XML преобразования. Например, преобразование из главы 4 просто копировало один документ XML в другой. Обратите внимание на метод вывода, который установлен в XML:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node">
<xsl:copy>
<xsl:apply-templates select="@*|node"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Этот пример был приведен в начале главы, в нем
planets.xml
реорганизован на основе плотности планет: <?xml version="1.0" encoding="UTF-8"?>
<DATA>
<DENSITY>
<VALUE>.983</VALUE>
<NAME>Mercury</NAME>
<MASS>.0553</MASS>
<DAY>58.65</DAY>
<RADIUS>1516</RADIUS>
</DENSITY>
<DENSITY>
<VALUE>.943</VALUE>
<NAME>Venus</NAME>
<MASS>.815</MASS>
<DAY>116.75</DAY>
<RADIUS>3716</RADIUS>
</DENSITY>
<DENSITY>
<VALUE>1</VALUE>
<NAME>Earth</NAME>
<MASS>1</MASS>
<DAY>1</DAY>
<RADIUS>2107</RADIUS>
</DENSITY>
</DATA>
Вот таблица стилей (листинг 6.3), создающая это преобразование.
Листинг 6.3. Реорганизация planets.xml на основе плотности
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="PLANETS">
<DATA>
<xsl:apply-templates/>
</DATA>
</xsl:template>
<xsl:template match="PLANET">
<DENSITY>
<VALUE>
<xsl:value-of select="DENSITY"/>
</VALUE>
<xsl:apply-templates/>
</DENSITY>
</xsl:template>
<xsl:template match="NAME">
<NAME>
<xsl:value-of select="."/>
</NAME>
</xsl:template>
<xsl:template match="MASS">
<MASS>
<xsl:value-of select="."/>
</MASS>
</xsl:template>
<xsl:template match="RADIUS">
<RADIUS>
<xsl:value-of select="."/>
</RADIUS>
</xsl:template>
<xsl:template match="DAY">
<DAY>
<xsl:value-of select="."/>
</DAY>
</xsl:template>
<xsl:template match="DENSITY">
</xsl:template>
<xsl:template match="DISTANCE">
</xsl:template>
</xsl:stylesheet>
Следующий пример впервые был приведен в главе 5. В этом случае я только перечислил планеты из
planets.xml
, но в выходном документе я хотел видеть не просто фразу «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth.». Для этого я применил элементы <xsl:if>
:
Поделиться:
Популярные книги
Весь цикл «Десантник на престоле». Шесть книг
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Жертва
2. Звездный Бродяга
Фантастика:
боевая фантастика
космическая фантастика
рпг
попаданцы
6.25
рейтинг книги
Сердце Дракона. Том 10
10. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.14
рейтинг книги
В лапах зверя
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Бальмануг. (Не) Любовница 2
4. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Карл Маркс
342. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Изгои
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Камаэль
Фантастика:
фэнтези
ужасы и мистика
5.20
рейтинг книги
Древесный маг Орловского княжества 6
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Курсант: назад в СССР
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Ищу жену с прицепом
2. Спасатели
Любовные романы:
современные любовные романы
6.40
рейтинг книги
Князь Серединного мира
4. Страж
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Отряд
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Неверный
Любовные романы:
современные любовные романы
5.50