=> Главная База Знаний Xslt Метод вывода: текст


Метод вывода: текст

Метод вывода: текст

Этот метод вывода представляет простой текст. В данном случае выходной документ являет собой только простой текст дерева документа. То есть процессор 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>

И вот результат — просто чистый текст, никакой разметки, никаких пропущенных символов, никаких инструкций обработки:

Mercury's mass is .0553 Earth masses. Its radius is 1516 miles. Its day is 58.65 Earth days long.

Venus's mass is .815 Earth masses. Its radius is 3716 miles. Its day is 116.75 Earth days long.

Earth's mass is 1 Earth masses. Its radius is 2107 miles. Its day is 1 Earth days long.

С другой стороны, метод текстового вывода предназначен не только для создания простого текста, он также применяется для любых текстовых форматов, отличных от XML и HTML. Как мы видели в главе 2, с его помощью можно создавать форматированные документы в формате Rich Text Format (RTF). Rich Text Format использует встроенные текстовые коды, задающие формат документов, и при помощи метода текстового вывода вы можете самостоятельно поместить эти коды в документы.

Следующий пример таблицы стилей первоначально был приведен в главе 2, где она использовалась с целью перевода planets.xml в формат RTF, для понимания которого вы теперь лучше вооружены. В этом случае я преобразую

planets.xml
в
planets.rtf
, используя коды RTF как элементы буквального результата:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:strip-space elements="*"/>

 <xsl:template match="/PLANETS">{\rtf1\ansi\deff0{\fonttbl

  {\\fcharset0 Courier New:}}

  \viewkind4\ucl\pard\lang1033\b\ The Planets Table\par

  \b0 Name\tab Mass\tab Rad.\tab Day\par

  <xsl:apply-templates/>

  \par

 }</xsl:template>


 <xsl:template match="PLANET">

  <xsl:value-of select="NAME"/>

  \tab

  <xsl:value-of select="MASS"/>

  \tab

  <xsl:value-of select="RADIUS"/>

  \tab

  <xsl:value-of select="DAY"/>

  \tab

  \par

 </xsl:template>

</xsl:stylesheet>

Результирующий документ RTF,

planets.rtf
, показан на 2 в редакторе Microsoft Word 2000.

Метод вывода: текст

2. Файл planets.rtf в Microsoft Word


Заметьте, что методом вывода является текст, а не что-нибудь наподобие «

rtf
»:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:strip-space elements="*"/>

 <xsl:template match="/PLANETS">{\rtf1\ansi\deff0{\fonttbl

  {\\fcharset0 Courier New:}}

  \viewkind4\ucl\pard\lang1033\b\ The Planets Table\par

  .

  .

  .

Отметьте также, что я поместил коды RTF сразу же после элемента

<xsl:template>
, поскольку документы RTF должны с самого начала начинаться с кодов RTF; если бы я начал вставлять коды RTF на следующей строке, как, например:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:strip-space elements="*"/>

 <xsl:template match="/PLANETS">{

  \rtf1\ansi\deff0{\fonttbl

  {\\fcharset0 Courier New:}}

  \viewkind4\ucl\pard\lang1033\b\ The Planets Table\par

  .

  .

  .

то выходной файл RTF начинался бы с символа новой строки, что привело бы к ошибке в приложении, работающем с файлом RTF (например, вероятно, Microsoft Word).