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

Обработка всегда начинается с шаблона, где match="/". Это значение пути адресации соответствует корневому узлу (в нашем случае source). Однако многие преобразования XSL не содержат такой шаблон явно. В этом случае используется неявный шаблон (он содержит только единственную инструкцию). Эта инструкция обозначает: обрабатывать все дочерние элементы текущего узла, включая текстовые узлы. Сравните преобразование 1 и преобразование 2. Когда шаблон для узла существует, никакой обработки по умолчанию не происходит (преобразование 3). Если вы хотите включить обработку потомков узла, то вы должны явно указать шаблоны для них (преобразование 4).

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

Исходный XML
<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>

Результат
<div style="color:purple">AAA id=a1</div>

<div style="color:purple">AAA id=a2</div>

Представление HTML
AAA id=a1
AAA id=a2
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="AAA">
     <div style="color:purple">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>


</xsl:stylesheet>



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

Исходный XML
<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>

Результат
<div style="color:purple">AAA id=a1</div>

<div style="color:purple">AAA id=a2</div>

Представление HTML
AAA id=a1
AAA id=a2
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/source">
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="AAA">
     <div style="color:purple">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>


</xsl:stylesheet>



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

Исходный XML
<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>

Результат
<div style="color:purple">AAA id=a1</div>

<div style="color:purple">AAA id=a2</div>

Представление HTML
AAA id=a1
AAA id=a2
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="AAA">
     <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="BBB">
     <div style="color:blue">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>

<xsl:template match="CCC">
     <div style="color:maroon">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>

<xsl:template match="DDD">
     <div style="color:green">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>


</xsl:stylesheet>



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

Исходный XML
<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>

Результат
<div style="color:purple">AAA id=a1</div>
     
<div style="color:blue">BBB id=b1</div>
     
<div style="color:blue">BBB id=b2</div>


<div style="color:purple">AAA id=a2</div>
     
<div style="color:blue">BBB id=b3</div>
     
<div style="color:blue">BBB id=b4</div>
     
<div style="color:maroon">CCC id=c1</div>
          
<div style="color:green">DDD id=d1</div>
      
     
<div style="color:blue">BBB id=b5</div>
          
<div style="color:maroon">CCC id=c2</div>

Представление HTML
AAA id=a1
BBB id=b1
BBB id=b2
AAA id=a2
BBB id=b3
BBB id=b4
CCC id=c1
DDD id=d1
BBB id=b5
CCC id=c2
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="/xslTutorial">
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="AAA">
     <div style="color:purple">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="BBB">
     <div style="color:blue">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="CCC">
     <div style="color:maroon">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="DDD">
     <div style="color:green">
          <xsl:value-of select="name()"/>
          <xsl:text> id=</xsl:text>
          <xsl:value-of select="@id"/>
     </div>
</xsl:template>


</xsl:stylesheet>

Raleigh.ru Copyright © 2002