=> Главная База Знаний Xslt Document()


Document()

document()

Функция

document
особенно полезна, потому что с ее помощью можно читать несколько документов и обрабатывать их содержимое. Функция
document
применяется следующим образом:

node-set document(uri, base-uri?)

Функция принимает параметр

uri
, который может представлять собой URI читаемого документа или набор узлов, чьи строковые значения задают идентификаторы URI. Второй, необязательный параметр
base-uri
представляет собой набор узлов, базовый URI которого используется для вычисления всех относительных URI, могущих находиться в параметре
uri
.

В следующем примере (листинг 8.2) я обрабатываю в процессоре XSLT один документ,

planets1.xml
, и также считываю и обрабатываю второй документ,
planets2.xml
. Вот
planets1.xml
.

Листинг 8.2. planets1.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xml" href="/planets.xsl"?>

<PLANETS href="/planets2.xml">

</PLANETS>

Вот

planets2.xml
— в элементе
<PLANET>
содержится одна планета (листинг 8.3).

Листинг 8.3. planets2.xml

<?xml version="1.0"?>

<PLANET>

 <NAME>Mercury</NAME>

 <MASS UNITS="(Earth = 1)">.0553</MASS>

 <DAY UNITS="days">58.65</DAY>

 <RADIUS UNITS="miles">1516</RADIUS>

 <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

 <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

</PLANET>

А вот таблица стилей

planets.xml
, которую я применяю к
planets1.xml
. Таблица стилей содержит шаблон, выбирающий элемент
<PLANET>
в
planets1.xml
, и в этом шаблоне я считываю
planets2.xml
при помощи
<xsl:apply-templates>
и функции
document
(листинг 8.4).

Листинг 8.4. Применение функции document

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

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

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     The Planets Table

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     The Planets Table

    </H1>

    <TABLE BORDER="2">

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

     </TR>

     <xsl:apply-templates select="document(@href)"/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>


 <xsl:template match="PLANET">

  <TR>

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

   <TD><xsl:apply-templates select="MASS"/></TD>

   <TD><xsl:apply-templates select="RADIUS"/></TD>

   <TD><xsl:apply-templates select="DAY"/></TD>

  </TR>

 </xsl:template>

 .

 .

 .

 <xsl:template match="DAY">

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

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

</xsl:stylesheet>

Эта таблица стилей обрабатывает данные в

planets1.xml
и также считывает и обрабатывает
planets2.xml
; вот полный результат — как видите, данные для
planets2.xml
добавились нужным образом:

<HTML>

 <HEAD>

  <TITLE>

   The Planets Table

  </TITLE>

 </HEAD>

 <BODY>

  <H1>

   The Planets Table

  </H1>

  <TABLE BORDER="2">

   <TR>

    <TD>Name</TD>

    <TD>Mass</TD>

    <TD>Radius</TD>

    <TD>Day</TD>

   </TR>

   <TR>

    <TD>Mercury</TD>

    <TD>.0553 (Earth = 1)</TD>

    <TD>1516 miles</TD>

    <TD>58.65 days</TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Функция

document
удобна, поскольку позволяет считывать на этапе выполнения такие дополнительные документы, как справка о правах владения или отказе от них, фирменный бланк и т.п.