`

Стивен Холзнер - XSLT

1 ... 79 80 81 82 83 ... 115 ВПЕРЕД
Перейти на страницу:

Следующий пример показывает, как можно присвоить параметру param1 значение value1 в командной строке, используя процессор XSLT от Oracle в Windows. Заметьте, что при установке значений параметра в командной строке его все равно нужно объявлять в таблице стилей при помощи <xsl:param>:

C:>java oraclе.xml.parser.v2.oraxsl -p param1='value1' planets.xml planets.xsl output.xml

Вот как то же самое можно сделать при помощи Saxon:

C:>saxon source.xml stylesheet.xsl param1=value1 > output.xml

при помощи Xalan:

C:>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT output.xml -PARAM parma1 value1

и XT:

C:XSL>java -Dcom jclark.xsl.sax parser=org.apache.xerces.parsers.SAXParser.com.jclark.xsl.sax.Driver planets.xml planets.xsl output.xml param1=value1

Элемент <xsl:key>: выбор по ключу 

Элемент <xsl:key> позволяет создать ключ и выбрать узлы по этому ключу. Он обладает следующими атрибутами:

• name (обязательный). Имя ключа, устанавливается в QName;

• match (обязательный). Устанавливается в образец выбора для выбора узлов, к которым применяется ключ;

• use (обязательный). Устанавливается в выражение, определяющее значение ключа.

При помощи ключей можно легко распознавать элементы; конкретные ключи можно выбрать при помощи образца «key()». В главе 4 мы познакомились с ключами, имеющими одно значение. В следующем примере я использую ключи для выбора планет, у которых атрибут COLOR был установлен в «BLUE» — в данном случае это Земля:

<?xml version="1.0"?>

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

<PLANETS>

 .

 .

 .

 <PLANET COLOR="BLUE">

  <NAME>Earth</NAME>

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

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

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

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

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

 </PLANET>

</PLANETS>

Я создал ключ COLOR, выбирающий элементы <PLANET> путем проверки их атрибута COLOR. Ключ выглядит следующим образом:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>

 .

 .

 .

После этого я применил образец «key()» для того, чтобы выбрать элементы <PLANET>, у которых атрибут COLOR установлен в «BLUE»:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>

 <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="key('COLOR', 'BLUE')"/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 .

 .

 .

И вот результат — как видите, образцу удовлетворяет только Земля:

<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>Earth</TD>

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

    <TD>2107 miles</TD>

    <TD>1 days</TD>

</TR>

  </TABLE>

 </BODY>

</HTML>

Но в данном случае существует больше вариантов. Например, ключу могут соответствовать несколько узлов, а это означает, что использующий ключ образец вернет набор узлов. Пусть, например, все планеты будут иметь одно и то же значение атрибута COLOR, «UNKNOWN» (неизвестен):

<?xml version="1.0"?>

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

<PLANETS>

 <PLANET COLOR="UNKNOWN">

  <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>

 <PLANET COLOR="UNKNOWN">

  <NAME>Venus</NAME>

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

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

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

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

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

 </PLANET>

 <PLANET COLOR="UNKNOWN">

  <NAME>Earth</NAME>

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

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

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

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

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

 </PLANET>

</PLANETS>

Если создать теперь ключ COLOR следующим образом: <xsl:key name="COLOR" match="PLANET" use="@COLOR"/> и осуществить поиск по этому ключу по образцу «key('COLOR', 'BLUE')», то будут выбраны все три планеты:

<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>

   <TR>

    <TD>Venus</TD>

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

    <TD>3716 miles</TD>

    <TD>116.75 days</TD>

   </TR>

   <TR>

    <TD>Earth</TD>

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

    <TD>2107 miles</TD>

    <TD>1 days</TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Кроме случая, когда ключ выбирает несколько узлов, узел также может предоставить несколько значений для одного ключа. Предположим, вы установили ключ для работы с элементом <NAME> внутри элемента <PLANET>. Но что, если каждый элемент <PLANET> содержит более одного элемента <NAME>, как в этом примере:

<?xml version="1.0"?>

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

<PLANETS>

 <PLANET>

  <NAME>Mercury</NAME>

  <NAME>Sister Planet</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>

 <PLANET>

  <NAME>Venus</NAME>

  <NAME>Sister Planet</NAME>

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

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

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

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

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

 </PLANET>

 <PLANET>

  <NAME>Earth</NAME>

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

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

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

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

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

 </PLANET>

</PLANETS>

В этом случае каждый элемент <NAME> проверяется на совпадение с ключом. Предположим, например, что я хочу выбрать элементы <NAME> с текстом «Sister Planet». Вот таблица стилей:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 <xsl:key name="NAME" match="PLANET" use="NAME"/>

1 ... 79 80 81 82 83 ... 115 ВПЕРЕД
Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Стивен Холзнер - XSLT, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)