XSLT
Шрифт:
<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>
Следующий
planets.xml
, но в выходном документе я хотел видеть не просто фразу «The first three planets are: Mercury Venus Earth» (первые три планеты: Меркурий Венера Земля), a «The first three planets are: Mercury, Venus, and Earth.». Для этого я применил элементы <xsl:if>
: <?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="PLANETS">
<DOCUMENT>
<TITLE>
The Planets
</TITLE>
<PLANETS>
The first three planets are: <xsl:apply-templates select="PLANET"/>
</PLANETS>
</DOCUMENT>
</xsl:template>
<xsl:template match="PLANET">
<xsl:value-of select="NAME"/>
<xsl:if test="position!=last">. </xsl:if>
<xsl:if test="position=last-1">and </xsl:if>
<xsl:if test="position=last">.</xsl:if>
</xsl:template>
</xsl:stylesheet>
И
вот результат:<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<TITLE>
The Planets
</TITLE>
<PLANETS>
The first three planets are: Mercury, Venus, and Earth.
</PLANETS>
</DOCUMENT>
Хотя многие книги рассматривают главным образом преобразования из XML в HTML, важно понять, что преобразования XML-XML завоевывают все большую популярность, поэтому на них я также останавливаю ваше внимание.
Метод вывода: текст
Этот метод вывода представляет простой текст. В данном случае выходной документ являет собой только простой текст дерева документа. То есть процессор XSLT создает результирующее дерево, выводя строковое значение каждого текстового узла, без каких-либо сокращений.
Значением по умолчанию для атрибута
media-type
является «text/plain
». Атрибут encoding
устанавливает кодировку, используемую процессором XSLT для преобразования последовательностей символов в последовательности байтов. Заметьте, что если результирующий документ содержит символ, который не может быть представлен в выходной кодировке, процессор XSLT должен сгенерировать ошибку. В листинге 6.4
planets.xml
преобразуется в простой текст при помощи метода текстового вывода. Листинг 6.4. Преобразование в простой текст
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="PLANET">
<xsl:value-of select="NAME"/>
<xsl:text>'s mass is </xsl:text>
<xsl:value-of select="MASS"/>
<xsl:text> Earth masses. Its radius is </xsl:text>
<xsl:value-of select="RADIUS"/>
<xsl:text> miles. Its day is </xsl:text>
<xsl:value-of select="DAY"/>
<xsl:text> Earth days long.</xsl:text>
</xsl:template>
</xsl:stylesheet>
И вот результат — просто чистый текст, никакой разметки, никаких пропущенных символов, никаких инструкций обработки:
Поделиться с друзьями: