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

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

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

following-sibling

   <source lang="xml">

File: Data.xml <Employees>

<Person>
 <FirstName>A</FirstName>
 <LastName>B</LastName>
 <DateOfBirth>2008-12-12</DateOfBirth>
</Person>
<Person>
 <FirstName>C</FirstName>
 <LastName>D</LastName>
 <DateOfBirth>2008-11-11</DateOfBirth>
</Person>
<Person>
 <FirstName>E</FirstName>
 <LastName>F</LastName>
 <DateOfBirth>2008-10-10</DateOfBirth>
</Person>

</Employees>

File: Transform.xslt <xsl:stylesheet

    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
   <xsl:template match="/">
        <html>
         <head>
          <title>following-sibling axis.</title>
         </head>
         <body>

sibling axis demo.

          <xsl:apply-templates select="/Employees/Person[1]/FirstName" />
         </body>
        </html> 
   </xsl:template>
   <xsl:template match="FirstName">
        <xsl:for-each select="following-sibling::*">
             <paragraph>
                 <xsl:value-of select="name(.)" /> 
                 which contains the text 
                 "<xsl:value-of select="." />".
             </paragraph>
        </xsl:for-each>
   </xsl:template>

</xsl:stylesheet> Output: <html>

  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <title>following-sibling axis.</title>
  </head>
  <body>

sibling axis demo.

     <paragraph>LastName 
        which contains the text 
        "B".
        
     </paragraph>
     <paragraph>DateOfBirth 
        which contains the text 
        "2008-12-12".
        
     </paragraph>
  </body>

</html>

</source>
   
  


following-sibling demo

   <source lang="xml">

File: Data.xml <wine grape="Cabernet">

 <winery>shop 1</winery>
 <product>product 1</product>
 <year>1996</year>
 <prices date="12/1/01">
   <list>13.99</list>
   <discounted>11.00</discounted>
 </prices>

</wine> 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="product">
   xsl:value-of:
   <xsl:value-of select="following-sibling::*" />
   xsl:copy-of:
   <xsl:copy-of select="following-sibling::*" />
 </xsl:template>
 
 <xsl:template match="winery | year | prices | list | discounted " />

</xsl:stylesheet> Output:


   xsl:value-of:
   1996
   xsl:copy-of:
   <year>1996</year><prices date="12/1/01">
   <list>13.99</list>
   <discounted>11.00</discounted>
 </prices>
 
 
</source>
   
  


following-sibling::node()[1][not(self::NL)]

   <source lang="xml">

File: Data.xml <?xml version="1.0"?> <PLAY>

 <TITLE>Nothing</TITLE>
 <FM>

A

T

 </FM>
 <PERSONAE>
   <TITLE>D</TITLE>
   <PERSONA>D</PERSONA>
   <PGROUP>
     <PERSONA>C</PERSONA>
     <PERSONA>B</PERSONA>
     <GRPDESCR>f</GRPDESCR>
   </PGROUP>
   <PERSONA>F</PERSONA>
   <PERSONA>H</PERSONA>
   <PERSONA>B</PERSONA>
   <PGROUP>
     <PERSONA>MARGARET</PERSONA>
     <PERSONA>URSULA</PERSONA>
     <GRPDESCR>gentlewomen attending on Hero.</GRPDESCR>
   </PGROUP>
   <PERSONA>Messengers, Watch, Attendants, &c.</PERSONA>
 </PERSONAE>

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

 version="2.0">
 <xsl:template match="SCENE">
   <xsl:variable name="flat">
     <NL />
     <xsl:apply-templates mode="phase1" />
   </xsl:variable>
   <xsl:apply-templates
     select="$flat/NL[following-sibling::node()]" mode="phase2" />
 </xsl:template>
 <xsl:template match="SPEECH" mode="phase1">
   <speaker>
     <xsl:value-of select="SPEAKER" />
   </speaker>
   <xsl:copy-of select="node() except SPEAKER" />
 </xsl:template>
 <xsl:template match="NL" mode="phase2">
   <line>
     <xsl:apply-templates
       select="following-sibling::node()[1][not(self::NL)]" mode="phase2" />
   </line>
 </xsl:template>
 <xsl:template match="node()" mode="phase2">
   <xsl:copy-of select="." />
   <xsl:apply-templates
     select="following-sibling::node()[1][not(self::NL)]" mode="phase2" />
 </xsl:template>

</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>

 Nothing
 
   
     A
   
   
     T
   
 
 
   D
   D
   
     C
     B
     f
   
   F
   H
   B
   
     MARGARET
     URSULA
     gentlewomen attending on Hero.
   
   Messengers, Watch, Attendants, &c.
 
</source>
   
  


select="following-sibling::*[1]/contact/name/firstName"

   <source lang="xml">

File: Data.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Transform.xslt" type="text/xsl"?> <employees xmlns="http://www.domain.ru/namespace/employee">

 <title>Employee Data File</title>
 <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" />
     </body>
   </html>
 </xsl:template>
 <xsl:template match="employee">
   <xsl:variable name="choose">
     <xsl:choose>
       <xsl:when
         test="following-sibling::*/contact/name/firstName">
         <xsl:value-of
           select="following-sibling::*[1]/contact/name/firstName" />
       </xsl:when>
       <xsl:otherwise>Nobody</xsl:otherwise>
     </xsl:choose>
   </xsl:variable>

The employee element node that is the following sibling of <xsl:value-of select="self::*/contact/name/firstName" /> is for the following staff member: <xsl:value-of select="$choose" />

 </xsl:template>

</xsl:stylesheet> Output: <html>

  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <title>Employee Output</title>
  </head>
  <body></body>

</html>

</source>
   
  


select="following-sibling::notification[count(preceding-sibling::employeeName[1] | current()) = 1]"

   <source lang="xml">

File: Data.xml <?xml version="1.0"?> <group>

 <employeeName>Samson</employeeName>
 <notification>0001</notification>
 <notification>name 1</notification>
 <notification>0003</notification>
 <employeeName>Delihla</employeeName>
 <notification>0004</notification>
 <notification>0005</notification>
 <notification>0006</notification>

</group> File: Transform.xslt <?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="html" indent="yes" />
 <xsl:template match="/">
   <xsl:apply-templates select="group" />
 </xsl:template>
 <xsl:template match="group">
   <xsl:for-each select="employeeName">
     <tr>
       <td>
         <xsl:value-of select="." />
       </td>
       <xsl:for-each
         select="following-sibling::notification[count(preceding-sibling::employeeName[1] | current()) = 1]">
         <td>
           <xsl:value-of select="." />
         </td>
       </xsl:for-each>
     </tr>
   </xsl:for-each>
 </xsl:template>

</xsl:stylesheet> Output: <tr>

  <td>Samson</td>
  <td>0001</td>
  <td>name 1</td>
  <td>0003</td>

</tr> <tr>

  <td>Delihla</td>
  <td>0004</td>
  <td>0005</td>
  <td>0006</td>

</tr>

</source>