Книга: XSLT
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
удобна, поскольку позволяет считывать на этапе выполнения такие дополнительные документы, как справка о правах владения или отказе от них, фирменный бланк и т.п.
- Conventions used in this document
- Appendix H. GNU Free Documentation License
- Why this document was written
- Terms used in this document
- 5. COMBINING DOCUMENTS
- 6. COLLECTIONS OF DOCUMENTS
- How to use this License for your documents
- Для чего нужны папки Windows, Documents and Settings, Program Files и Temp?
- После переустановки Windows нет доступа к папке Мои документы или нельзя удалить оставшуюся от старой системы папку Docu...
- Функция document
- Reading Documentation
- Documentation