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>
:
Поделиться:
Популярные книги
Кодекс Крови. Книга ХIII
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Травница Его Драконейшества
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Французская новелла XX века. 1900–1939
Проза:
классическая проза
6.25
рейтинг книги
Родословная. Том 2
2. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 9
9. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XIV
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неучтенный элемент. Том 8
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Группа крови на рукаве
1. ГК
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Целого Мира Мало
Любовные романы:
современные любовные романы
8.88
рейтинг книги
Гранд
3. Воздушный стрелок
Фантастика:
боевая фантастика
8.12
рейтинг книги
Эпоха Опустошителя. Том IV
4. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ермак. Телохранитель
2. Ермак
Фантастика:
альтернативная история
7.50