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

Оси играют очень важную роль в XSLT. Для более подробной информации читайте XSLT reference. Сравните: ось child (преобразование 1), ось descendant (преобразование 2), ось parent (преобразование 3), ось ancestor (преобразование 4), ось following-sibling (преобразование 5), ось preceding-sibling (преобразование 6), ось following (преобразование 7), ось preceding (преобразование 8), ось attribute (преобразование 9), ось namespace (преобразование 10), ось self (преобразование 11), ось descendant-or-self (преобразование 12), ось ancestor-or-self (преобразование 13).

Преобразование 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: child</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>b1 b2 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td/>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>b3 b4 c1 b5 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td/>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>c2 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>c3 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td/>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: child</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="child::*">
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: descendant</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>b1 b2 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td/>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>b3 b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td/>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>c2 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>c3 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td/>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: descendant</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="descendant::*">
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: parent</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>source </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>a1 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>a1 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>source </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>c1 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>b5 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: parent</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="parent::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: ancestor</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>source </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>source a1 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>source a1 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>source </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>source a2 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>source a2 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>source a2 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>source a2 c1 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>source a2 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>source a2 b5 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: ancestor</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="ancestor::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: following-sibling</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>b2 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td/>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>b4 c1 b5 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>c1 b5 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>b5 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td/>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td/>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: following-sibling</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="following-sibling::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: preceding-sibling</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>b1 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>a1 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>b3 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>b3 b4 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>b3 b4 c1 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td/>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: preceding-sibling</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="preceding-sibling::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: following</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>a2 b3 b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>b2 a2 b3 b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>a2 b3 b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>b5 c3 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td/>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td/>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: following</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="following::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: preceding</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td/>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>b1 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>a1 b1 b2 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>a1 b1 b2 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>a1 b1 b2 b3 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>a1 b1 b2 b3 b4 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>a1 b1 b2 b3 b4 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>a1 b1 b2 b3 b4 c1 c2 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>a1 b1 b2 b3 b4 c1 c2 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: preceding</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="preceding::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: attribute</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>id pos </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>id </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>id </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>id </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>id </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>id </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>id </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>id </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>id </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>id </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: attribute</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="attribute::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: namespace</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>xml </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>xml </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: namespace</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="namespace::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: self</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>a1 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>b1 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>b2 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>a2 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>b3 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>b4 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>c1 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>c2 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>b5 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>c3 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: self</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="self::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: descendant-or-self</th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>a1 b1 b2 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>b1 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>b2 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>a2 b3 b4 c1 c2 b5 c3 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>b3 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>b4 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>c1 c2 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>c2 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>b5 c3 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>c3 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: descendant-or-self</th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="descendant-or-self::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>



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

Исходный 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">
          <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
          <CCC id="c3"/>
     </BBB>
</AAA>

</source>

Результат
<table border="1" cellpadding="6">
  <tr>
     <th colspan="2">Axis: ancestor-or-self </th>
  </tr>
  <tr>
     <th>Element</th>
     <th>Node-set</th>
  </tr>
  <tr>
     <td>AAA id = a1</td>
     <td>source a1 </td>
  </tr>
  <tr>
     <td>BBB id = b1</td>
     <td>source a1 b1 </td>
  </tr>
  <tr>
     <td>BBB id = b2</td>
     <td>source a1 b2 </td>
  </tr>
  <tr>
     <td>AAA id = a2</td>
     <td>source a2 </td>
  </tr>
  <tr>
     <td>BBB id = b3</td>
     <td>source a2 b3 </td>
  </tr>
  <tr>
     <td>BBB id = b4</td>
     <td>source a2 b4 </td>
  </tr>
  <tr>
     <td>CCC id = c1</td>
     <td>source a2 c1 </td>
  </tr>
  <tr>
     <td>CCC id = c2</td>
     <td>source a2 c1 c2 </td>
  </tr>
  <tr>
     <td>BBB id = b5</td>
     <td>source a2 b5 </td>
  </tr>
  <tr>
     <td>CCC id = c3</td>
     <td>source a2 b5 c3 </td>
  </tr>
</table>

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

<xsl:template match="/">
     <table border="1" cellpadding="6">
          <tr>
               <th colspan="2">Axis: ancestor-or-self </th>
          </tr>
          <tr>
               <th>Element</th>
               <th>Node-set</th>
          </tr>
          <xsl:for-each select="/source//*">
               <xsl:call-template name="print"/>
          </xsl:for-each>
     </table>
</xsl:template>

<xsl:template name="print">
     <tr>
          <td>
               <xsl:value-of select="name()"/>
               <xsl:text> id = </xsl:text>
               <xsl:value-of select="./@id"/>
          </td>
          <td>
               <xsl:for-each select="ancestor-or-self ::*">
                    <xsl:if test="not(@id)">
                         <xsl:value-of select="name()"/>
                    </xsl:if>
                    <xsl:value-of select="./@id"/>
                    <xsl:text> </xsl:text>
               </xsl:for-each>
          </td>
     </tr>
</xsl:template>


</xsl:stylesheet>

Raleigh.ru Copyright © 2002