Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Select=descendant-or-self

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.com/namespace/header">     <title>Employee Data File</title>     <maintainer>developer 1</maintainer>   </head:header>   <employee eid="1" dept="programming">     <contact addInfo="info1">       <name>         <firstName>J</firstName>         <middleName int="B">B</middleName>         <lastName>S</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.com</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.com</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>             <table>                <tr>                   <th>Number</th>                   <th>Last Name</th>                   <th>First Name</th>                   <th>Email</th>                </tr>                <xsl:apply-templates select="employees/employee" />             </table>          </body>       </html>    </xsl:template>    <xsl:template match="employee">       <tr>          <xsl:for-each select="descendant-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>       <table>          <tr>             <th>Number</th>             <th>Last Name</th>             <th>First Name</th>             <th>Email</th>          </tr>          <tr>             <td>1</td>             <td>S</td>             <td>J</td>             <td>a@a.com</td>          </tr>          <tr></tr>       </table>    </body> </html>