select node by attribute value : Attribute « XSLT stylesheet « XML






select node by attribute value


File: Data.xml

<?xml version="1.0"?>
<employees>
  <employee eid="98145" dept="programming">
    <title>Java Programmer</title>
    <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.com</email>
    </contact>
    <hireDate>2008-10-29</hireDate>
  </employee>

</employees>


File: Transform.xslt


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
       version="1.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="employees">
    <html>
      <head>
        <title>Employee Data</title>
      </head>
      <body>
        <table>
          <tr>
            <th>Name</th>
            <th>Hire Date</th>
            <th>Address</th>
            <th>Phone</th>
            <th>Fax</th>
            <th>Email</th>
          </tr>
          <xsl:for-each select="employee">
            <tr>
              <td><xsl:value-of select="contact/name/name"/> <xsl:value-of select="contact/name/middleName"/> <xsl:value-of select="contact/name/lastName"/></td>
              <td><xsl:value-of select="hireDate"/></td>
              <td><xsl:value-of select="contact/address/street"/>
                  <br />
                  <xsl:value-of select="contact/address/city"/>, <xsl:value-of select="contact/address/state"/> <xsl:value-of select="contact/address/zip"/>
              </td>
              <td>WK: <xsl:value-of select="contact/phone/tel[@type=wk]"/>
                  <br />
                  HM: <xsl:value-of select="contact/phone/tel[@type=hm]"/>
              </td>
              <td><xsl:value-of select="contact/phone/fax"/></td>
              <td><xsl:value-of select="contact/email"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
    </xsl:template>
</xsl:stylesheet>

Output:

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Employee Data</title>
   </head>
   <body>
      <table>
         <tr>
            <th>Name</th>
            <th>Hire Date</th>
            <th>Address</th>
            <th>Phone</th>
            <th>Fax</th>
            <th>Email</th>
         </tr>
         <tr>
            <td>BrianSmith</td>
            <td>2008-10-29</td>
            <td>1 Drive<br>Vancouver, BC
            </td>
            <td>WK: <br>
               HM: 
            </td>
            <td>303-4667357</td>
            <td>a@a.com</td>
         </tr>
      </table>
   </body>
</html>

 








Related examples in the same category

1.compare attribute value
2.Get attribute from different level
3.List the attribute names and values
4.if there is an attribute
5.Get value of attribute with @
6.Set attribute value in tranformation
7.attribute omitted
8.get attribute name