Главная -> XML&... -> XSLT в примерах 
>> Страница 55 << | Назад | Вперед | Содержание | Указатель

Функция id() позволяет обращаться к элементам по значениям их уникальных идентификаторов. Преобразование 1 является простым примером ее использования. Тщательно изучите преобразование 2. Содержание элемента title не отображается внутри квадратных скобок, так как в DTD его атрибут id определен как CDATA, а не как ID. Одновременно можно обрабатывать несколько идентификаторов (преобразование 3).

Преобразование 1

Исходный XML
<!DOCTYPE source [ 

<!ELEMENT chapter ANY>
<!ATTLIST chapter id ID #REQUIRED>
<!ELEMENT title ANY>
<!ATTLIST title id CDATA #REQUIRED>
<!ELEMENT text ANY>
<!ATTLIST text value ID #REQUIRED>

]>
<source>

<chapter id="intro">Introduction</chapter>
<chapter id="body">
     <title id="t1">BODY</title>
     <text value="text1">text text text</text>
</chapter>
<chapter id="end">THE END</chapter>

</source>

Результат
<P>Introduction</P>
<P>text text text</P>
<P>text text text</P>

Представление HTML

Introduction

text text text

text text text

Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <P>
          <xsl:value-of select="id('intro')"/>
     </P>
     <P>
          <xsl:value-of select="id('body')/text"/>
     </P>
     <P>
          <xsl:value-of select="id('text1')"/>
     </P>
</xsl:template>


</xsl:stylesheet>



Преобразование 2

Исходный XML
<!DOCTYPE source [ 

<!ELEMENT chapter ANY>
<!ATTLIST chapter id ID #REQUIRED>
<!ELEMENT title ANY>
<!ATTLIST title id CDATA #REQUIRED>
<!ELEMENT text ANY>
<!ATTLIST text value ID #REQUIRED>

]>
<source>

<chapter id="intro">Introduction</chapter>
<chapter id="body">
     <title id="t1">BODY</title>
     <text value="text1">text text text</text>
</chapter>
<chapter id="end">THE END</chapter>

</source>

Результат
<DIV>chapter : id = intro [ Introduction]</DIV>
<DIV>chapter : id = body [
BODY
text text text
]</DIV>
<DIV>title : id = t1 [ ]</DIV>
<DIV>text : value = text1 [ text text text]</DIV>
<DIV>chapter : id = end [ THE END]</DIV>

Представление HTML
chapter : id = intro [ Introduction]
chapter : id = body [ BODY text text text ]
title : id = t1 [ ]
text : value = text1 [ text text text]
chapter : id = end [ THE END]
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:for-each select="//*[@*]">
          <DIV>
               <xsl:value-of select="name()"/>
               <xsl:text> : </xsl:text>
               <xsl:apply-templates select="@*"/>
          </DIV>
     </xsl:for-each>
</xsl:template>

<xsl:template match="@*">
     <xsl:value-of select="name()"/>
     <xsl:text> = </xsl:text>
     <xsl:value-of select="."/>
     <xsl:text> [ </xsl:text>
     <xsl:value-of select="id(.)"/>
     <xsl:text>]</xsl:text>
</xsl:template>


</xsl:stylesheet>



Преобразование 3

Исходный XML
<!DOCTYPE source [ 

<!ELEMENT chapter ANY>
<!ATTLIST chapter id ID #REQUIRED>
<!ELEMENT title ANY>
<!ATTLIST title id CDATA #REQUIRED>
<!ELEMENT text ANY>
<!ATTLIST text value ID #REQUIRED>

]>
<source>

<chapter id="intro">Introduction</chapter>
<chapter id="body">
     <title id="t1">BODY</title>
     <text value="text1">text text text</text>
</chapter>
<chapter id="end">THE END</chapter>

</source>

Результат
<P style="color:red">Introduction</P>
<P style="color:red">
BODY
text text text
</P>
<P style="color:red">THE END</P>
<P>Introduction</P>
<P>Introduction</P>
<P>THE END</P>

Представление HTML

Introduction

BODY text text text

THE END

Introduction

Introduction

THE END

Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:apply-templates select="id('intro body end')"/>
     <P>
          <xsl:value-of select="id('intro body end')"/>
     </P>
     <P>
          <xsl:value-of select="id('body end intro')"/>
     </P>
     <P>
          <xsl:value-of select="id('in bod end')"/>
     </P>
</xsl:template>

<xsl:template match="*">
     <P style="color:red">
          <xsl:value-of select="."/>
     </P>
</xsl:template>


</xsl:stylesheet>

Raleigh.ru Copyright © 2002