Xslt 简明教程

XSLT Syntax

假设我们有以下样本 XML 文件 students.xml,需要将其转换为格式良好的 HTML 文档。

Let’s suppose we have the following sample XML file, students.xml, which is required to be transformed into a well-formatted HTML document.

students.xml

students.xml

<?xml version = "1.0"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

我们需要为上述 XML 文档定义一个 XSLT 样式表文档,以满足以下条件:

We need to define an XSLT style sheet document for the above XML document to meet the following criteria −

  1. Page should have a title Students.

  2. Page should have a table of student details.

  3. Columns should have following headers: Roll No, First Name, Last Name, Nick Name, Marks

  4. Table must contain details of the students accordingly.

Step 1: Create XSLT document

创建 XSLT 文档以满足上述要求,将其命名为 students.xsl,并保存在 students.xml 所在的同一位置。

Create an XSLT document to meet the above requirements, name it as students.xsl and save it in the same location where students.xml lies.

students.xsl

students.xsl

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- xsl stylesheet declaration with xsl namespace:
Namespace tells the xlst processor about which
element is to be processed and which is used for output purpose only
-->
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<!-- xsl template declaration:
template tells the xlst processor about the section of xml
document which is to be formatted. It takes an XPath expression.
In our case, it is matching document root element and will
tell processor to process the entire document with this template.
-->
   <xsl:template match = "/">
      <!-- HTML tags
         Used for formatting purpose. Processor will skip them and browser
            will simply render them.
      -->

      <html>
         <body>
            <h2>Students</h2>

            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <!-- for-each processing instruction
               Looks for each element matching the XPath expression
               -->

               <xsl:for-each select="class/student">
                  <tr>
                     <td>
                        <!-- value-of processing instruction
                        process the value of the element matching the XPath expression
                        -->
                        <xsl:value-of select = "@rollno"/>
                     </td>

                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>

                  </tr>
               </xsl:for-each>

            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

使用以下 xml-stylesheet 标记更新 student.xml 文档。将 href 的值设置为 students.xsl

Update student.xml document with the following xml-stylesheet tag. Set href value to students.xsl

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
...
</class>

Step 3: View the XML Document in Internet Explorer

students.xml

students.xml

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

Output

xlst students