объявление XML, помещаемое в результирующий документ, обычно включает версию XML (что обязательно) и информацию о кодировке (хотя формально информация о кодировке в документах XML не обязательна). Если задан атрибут standalone, результирующий документ должен включать объявление отдельного документа с тем же значением, что и значение у атрибута standalone.

При использовании атрибута 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>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату