XML/XSLT stylesheet/descendant — различия между версиями

Материал из Web эксперт
Перейти к: навигация, поиск
 
м (1 версия)
 
(нет различий)

Текущая версия на 11:26, 26 мая 2010

descendant demo

   <source lang="xml">

File: Data.xml <chapter>

 <para>para1</para>
 <figure>
   <title>title 1</title>
   <graphic fileref="pic1.jpg" />
 </figure>
 <para>para2</para>
 <sect1>
   <para>para3</para>
   <figure>
     <title>"He Lights"</title>
     <graphic fileref="pic2.jpg" />
   </figure>
   <para>line 1</para>
   <sect2>
     <para>line 2</para>
     <figure>
       <title>title 2</title>
       <graphic fileref="pic1.jpg" />
     </figure>
   </sect2>
 </sect1>

</chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="html" />
 <xsl:template match="chapter">
   <html>
     <body>
       Pictures:
       
<xsl:for-each select="descendant::figure"> <a href="#{generate-id(graphic)}"> <xsl:value-of select="title" /> </a>
</xsl:for-each> <xsl:apply-templates /> </body> </html> </xsl:template>
 <xsl:template match="para">

<xsl:apply-templates />

 </xsl:template>
 <xsl:template match="graphic">
     <a name="{generate-id(.)}">
       <img src="{@fileref}" />
     </a>
     
       <xsl:value-of select="../title" />
     
 </xsl:template>
 <xsl:template match="figure/title" />

</xsl:stylesheet>

Output: <html>

  <body>Pictures:
<a href="#d2e11">title 1</a>
<a href="#d2e27">"He Lights"</a>
<a href="#d2e43">title 2</a>

para1


<a name="d2e11"><img src="pic1.jpg"></a>title 1


para2


para3


<a name="d2e27"><img src="pic2.jpg"></a>"He Lights"


line 1


line 2


<a name="d2e43"><img src="pic1.jpg"></a>title 2



  </body>

</html>

</source>
   
  


descendant::tag name

   <source lang="xml">

File: Data.xml <chapter>

 <para>para1</para>
 <figure>
   <title>title 1</title>
   <graphic fileref="pic1.jpg" />
 </figure>

</chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
 
 <xsl:template match="chapter">
   <chapter>
     Pictures:
     <xsl:for-each select="descendant::figure">
       <xsl:value-of select="title" />
       <xsl:text/>
     </xsl:for-each>
     <xsl:apply-templates />
   </chapter>
 </xsl:template>
 <xsl:template match="@*|node()">
   <xsl:copy>
     <xsl:apply-templates select="@*|node()" />
   </xsl:copy>
 </xsl:template>

</xsl:stylesheet> Output: <chapter>

     Pictures:
     title 1
 <para>para1</para>
 <figure>
   <title>title 1</title>
   <graphic fileref="pic1.jpg"/>
 </figure>

</chapter>

</source>
   
  


select="descendant::figure/title[last()]"

   <source lang="xml">

File: Data.xml <chapter>

 <title>"title 1" Excerpt</title>
 <para>para1</para>
 <figure>
   <title>title 1</title>
   <graphic fileref="pic1.jpg" />
 </figure>

</chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
 <xsl:template match="chapter">
   Last figure title in chapter?
   <xsl:value-of select="descendant::figure/title[last()]" />
   No.
 </xsl:template>
 

</xsl:stylesheet> Output:

   Last figure title in chapter?
   title 1
   No.
 
 
</source>
   
  


select="descendant::title[last()]"

   <source lang="xml">

File: Data.xml <chapter>

 <title>"title 1" Excerpt</title>
 <para>para1</para>
 <figure>
   <title>title 1</title>
   <graphic fileref="pic1.jpg" />
 </figure>

</chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
 
 <xsl:template match="chapter">
   First title in chapter:
   <xsl:value-of select="descendant::title[1]" />
   Last title in chapter:
   <xsl:value-of select="descendant::title[last()]" />
 </xsl:template>
 

</xsl:stylesheet> Output:

   First title in chapter:
   "title 1" Excerpt
   Last title in chapter:
   title 1
</source>
   
  


value-of select="descendant::lastName"

   <source lang="xml">

File: Data.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Transform.xslt" type="text/xsl"?> <employees>

 <head:header xmlns:head="http://www.domain.ru/namespace/header">
   <title>Employee Data File</title>
   <maintainer>developer 1</maintainer>
 </head:header>
 <employee eid="1" dept="programming">
   <contact addInfo="info1">
     <name>
       <firstName>Joe</firstName>
       <middleName int="B">Brian</middleName>
       <lastName>Smith</lastName>
     </name>
     <address>
       <street>1 Drive</street>
       <city>Vancouver</city>
       <state>BC</state>
       <zipcode>80210</zipcode>
     </address>
     <phone>
       <tel type="wk">111-1111111</tel>
       <tel type="hm">222-222222</tel>
       <fax>303-4667357</fax>
     </phone>
     <email>a@a.ru</email>
   </contact>
   <hireDate>2008-10-29</hireDate>
 </employee>
 <employee eid="2" dept="training">
   <contact addInfo="info2">
     <name>
       <firstName>Sam</firstName>
       <middleName int="S">Stolte</middleName>
       <lastName>Williams</lastName>
       </name>
     <address>
       <street>1 St.</street>
       <city>Austin</city>
       <state>Texas</state>
       <zipcode>22222</zipcode>
     </address>
     <phone>
       <tel type="wk">512-3467899</tel>
       <tel type="hm">512-4623356</tel>
       <fax>512-3465655</fax>
     </phone>
     <email>s@s.ru</email>
   </contact>
   <hireDate>2000-03-11</hireDate>
 </employee>

</employees> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="html" indent="yes" />
  <xsl:template match="/">
     <html>
        <head>
           <title>Employee Output</title>
        </head>
        <body>
<xsl:apply-templates select="employees/employee" />
Number Last Name First Name Email
        </body>
     </html>
  </xsl:template>
  <xsl:template match="employee">
     <tr>
        <xsl:for-each select="ancestor-or-self::*[@dept="programming"]">
           <td>
              <xsl:number />
           </td>
           <td>
              <xsl:value-of select="descendant::lastName" />
           </td>
           <td>
              <xsl:value-of select="descendant::firstName" />
           </td>
           <td>
              <xsl:value-of select="descendant::email" />
           </td>
        </xsl:for-each>
     </tr>
  </xsl:template>

</xsl:stylesheet> Output: <html>

  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <title>Employee Output</title>
  </head>
  <body>
Number Last Name First Name Email
1 Smith Joe a@a.ru
  </body>

</html>

</source>