Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум_Сетевые технологии.doc
Скачиваний:
9
Добавлен:
09.11.2018
Размер:
1.02 Mб
Скачать

Практикум 3.3. Язык xPath в действии

Р

<source>

<AAA id="a1" pos="start">

<BBB id="b1"/>

<BBB id="b2"/>

</AAA>

<AAA id="a2">

<BBB id="b3"/>

<BBB id="b4"/>

<CCC id="c1">

<DDD id="d1"/>

</CCC>

<BBB id="b5">

<CCC id="c2"/>

</BBB>

</AAA>

</source>

ассмотрим XML-документ pr_3_3.xml:

Теперь давайте попробуем выделить некоторые части этого XML-документа и сформировать новый HTML-документ, содержащий эти части.

  1. Наберите в блокноте код из примера pr_3_3.xml

  2. С

    <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:template match="BBB">

    <div style="color:purple">

    <xsl:value-of select="name()"/>

    <xsl:text> id=</xsl:text>

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

    </div>

    </xsl:template>

    <xsl:template match="/source/AAA/CCC/DDD">

    <p style="color:red">

    <xsl:value-of select="name()"/>

    <xsl:text> id=</xsl:text>

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

    </p>

    </xsl:template>

    </xsl:stylesheet>

    оздайте следующую таблицу стилей pr_3_3.xsl:

В данной таблице я использовал функцию XSLT (name) и инструкцию <xsl:text>.

Функция «name ()» используется для получения имени узла. Инструкция <xsl:text> используется для воспроизведения текста в текущем месте вывода.

  1. П реобразуйте исходный XML-документ в pr_3_3.html, результат такого преобразования представлен на рис. 3.4.

Рис. 3.4. Выполненный файл pr_3_3.html

Используя возможности XPath, мы легко можем обращаться к любым частям XML-документа.

Практикум 4. Инструкция <xsl:for-each>

Инструкция <xsl:for-each> определяет шаблон, который применяется для каждого узла, выбранного с помощью атрибута select.

  1. И

    <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:template match="/">

    <xsl:for-each select="//BBB">

    <DIV style="color:red">

    <xsl:value-of select="name()"/>

    <xsl:text> id=</xsl:text>

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

    </DIV>

    </xsl:for-each>

    <xsl:for-each select="source/AAA/CCC">

    <DIV style="color:navy">

    <xsl:value-of select="name()"/>

    <xsl:text> id=</xsl:text>

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

    </DIV>

    </xsl:for-each>

    </xsl:template>

    </xsl:stylesheet>

    спользуя пример pr_3_3.xml, создадим таблицу стилей с инструкцией <xsl:for-each>

В данной таблице используются оператор «//», который говорит процессору XSLT о том, что надо выбрать все элементы с именем «BBB». Использование этого оператора не рекомендуется в больших документах, так как увеличивается время обработки таких документов.

  1. П реобразуйте XML-документ pr_3_3.xml с помощью таблицы pr_3_4.xsl в pr_3_4.html, результат такой обработки показан на рис. 3.5.

Рис. 3.5. Выполненный pr_3_4.html

Практикум 5. Инструкция <xsl:sort>

Инструкция <xsl:sort> используется для сортировки данных, мы рассмотрим возрастающей и убывающей сортировки.

  1. Н

    <source> <name>John</name> <name>Josua</name> <name>Charles</name> <name>Alice</name> <name>Martha</name> <name>George</name> </source>

    аберите следующих код в текстовом редакторе и сохраните его под именем pr_3_5.xml.

  1. И

    <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:template match="/">

    <TABLE>

    <xsl:for-each select="//name">

    <xsl:sort order="ascending" select="."/>

    <TR>

    <TH>

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

    </TH>

    </TR>

    </xsl:for-each>

    </TABLE>

    </xsl:template>

    </xsl:stylesheet>

    спользуя следующую таблицу pr_3_5_1.xsl отсортируем исходный данные XML-документа по возрастанию, преобразуйте исходный XML-документ в pr_3_5_1.html.

  1. Теперь отсортируем наши данные по убыванию, для этого изменим значение атрибута order в инструкции <xsl:sort> на значение «descending», в конце концов получим следующую инструкцию:

<xsl:sort order= «descending» select=”.”/>

  1. Сохраните таблицу стилей с новыми изменениями по именем pr_3_5_2.xsl и преобразуйте исходный документ pr_3_5.xml при помощи новой таблицы в pr_3_5_2.html.

  2. С

    <source>

    <car id="11"/>

    <car id="6"/>

    <car id="105"/>

    <car id="28"/>

    <car id="9"/>

    </source>

    ортировка может проводиться в текстовом режиме (pr_5_3_3.xml, pr_5_3_3.xsl) и цифровом режиме (pr_5_3_3.xml, pr_5_3_4.xsl)

P

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">

<TABLE>

<xsl:for-each select="//car">

<xsl:sort data-type="text" select="@id"/>

<TR>

<TH>

<xsl:text>Car-</xsl:text>

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

</TH>

</TR>

</xsl:for-each>

</TABLE>

</xsl:template>

</xsl:stylesheet>

r_5_3_3.xml

Pr_5_3_3.xsl

p

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">

<TABLE>

<xsl:for-each select="//car">

<xsl:sort data-type="number" select="@id"/>

<TR>

<TH>

<xsl:text>Car-</xsl:text>

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

</TH>

</TR>

</xsl:for-each>

</TABLE>

</xsl:template>

</xsl:stylesheet>

r_3_5_4.xsl

Практикум 6. Инструкция <xsl:if> в действии.

Допустим необходимо проверит начинается ли значение элемента с цифры, если начинается необходимо вывести сообщение в виде «the text starts with a number».

  1. Д

    <source>

    <value>125</value>

    <value>3aacc</value>

    <value>qa111</value>

    <value>9-12-45</value>

    <value>0-12-45</value>

    <value>Q6-88</value>

    <value>5-ACD</value>

    </source>

    опустим, существует следующий XML-документ pr_3_6.xml:

  1. С

    <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

    <xsl:template match="/">

    <xsl:apply-templates select="//value"/>

    </xsl:template>

    <xsl:template match="value">

    <P>

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

    <xsl:if test="starts-with(translate(., '0123456789','1111111111'), '1')">

    <xsl:text> (the text starts with a number)</xsl:text>

    </xsl:if>

    </P>

    </xsl:template>

    </xsl:stylesheet>

    оздадим таблицу стилей используя инструкцию <xsl:if>:

  1. В данном шаблоне используются функции (start-with, translate).

В общем случае функция start-with(“This is a string”, “This”) определяет, начинается ли строка “This is a string” с текста, который задается второй строкой “This”, если значение верно, то результат действия этой инструкции будет помещен в результирующее дерево, иначе нет.

Функция translate в данном случае действует следующим образом: берется значение элемента и сравнивается с маской «0123456789», если значение совпадает, то оно заменяется на «1» и дальше выполняется функция starts-with. Если первое значение элемента будет не цифра, тогда это значение не будет переведено в «1» и соответственно результатом работы функции start-with будет значение ложь и инструкция <xsl:if> выполнена не будет.

  1. Результат полученный после преобразования показан на рис 3.6.

Р ис. 3.6. Результат преобразования инструкцией <xsl:if>