XSLT(eXtensible Stylesheet Language Transformation) 样式转换语言

      最近一直在学XML,接触到了很多不知道的东东,从XML--->XML schema--->XPath--->XSLT都是非常经典的东西。XML作为一种标准确实有他可取之处。XML schema(XML模式)代替 DTD 定义 XML 文档结构。XPath 是元素的相对位置及路径。XSLT是一种用来转换XML文档结构的语言。

     我们已经知道,XML是一种电脑程序间交换原始数据的简单而标准的方法。它的成功并不在于它容易被人们书写和阅读,更重要的是,它从根本上解决了应用系统间的信息交换。因为XML满足了两个基本的需求:

(1).将数据和表达形式分离。就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。

(2).在不同的应用之间传输数据。电子商务数据交换的与日俱增使得这种需求越来越紧迫。

为了使数据便于人们的阅读理解,我们需要将信息显示出来或者打印出来,例如将数据变成一个HTML文件,一个PDF文件,甚至是一段声音;同样,为了使数据适合不同的应用程序,我们必须有能够将一种数据格式转换为另一种数据格式,比如需求格式可能是一个文本文件,一个SQL语句,一个HTTP信息,一定顺序的数据调用等。而XSLT就是我们用来实现这种转换功能的语言。将XML转换为HTML,是目前XSLT最主要的功能。这就是我们为什么要学XSTL的原因。

我觉得XSTL不仅仅只包含样式定义,它应该有以下三点:

(1)、一份xml文档

(2)、定义xml样式的schema

(3)、最后就是样式xstl了

结合前面的例子列出如下的例子,希望对各位有用:

ContractedBlock.gif ExpandedBlockStart.gif student.xsd (schema)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--W3C Schema 由 XMLSpy v2006 U 创建 (http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    
<xs:element name="students">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="student" maxOccurs="30"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="student">
        
<xs:complexType>
            
<xs:sequence>
                
<!-- 以下的元素是顺序出现的-->
                
<xs:element name="name" type="xs:string"/>
                
<xs:element name="age" type="agetype"/>
                
<xs:element name="sex" type="sextype"/>
                
<xs:element name="mobile" type="mobiletype"/>
            
</xs:sequence>
            
<xs:attribute name="no" type="xs:string"/>
        
</xs:complexType>
    
</xs:element>
    
<xs:simpleType name="agetype">
        
<xs:restriction base="xs:int">
            
<xs:maxInclusive value="150"/>
            
<xs:minInclusive value="0"/>
        
</xs:restriction>
    
</xs:simpleType>
    
<xs:simpleType name="sextype">
        
<xs:restriction base="xs:string">
            
<xs:enumeration value="男"/>
            
<xs:enumeration value="女"/>
        
</xs:restriction>
    
</xs:simpleType>
    
<xs:simpleType name="mobiletype">
        
<xs:restriction base="xs:string">
            
<xs:pattern value="13[0,2,9]\d{8}"/>
        
</xs:restriction>
    
</xs:simpleType>
</xs:schema>

2、xml文件

 

ContractedBlock.gif ExpandedBlockStart.gif student.xml
<?xml version="1.0" encoding="GB2312"?>
<!--xml样式引用-->
<?xml-stylesheet type="text/xsl" href="D:\测试项目\XML_Traning\student_table.xsl"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\测试项目\XML_Traning\student.xsd">

    
<student no="001">
        
<name>tony</name>
        
<age>15</age>
        
<sex></sex>
        
<mobile>13978561234</mobile>
    
</student>
    
<student no="002">
        
<name>tomin</name>
        
<age>20</age>
        
<sex></sex>
        
<mobile>13901234568</mobile>
    
</student>
</students>

3、xslt的定义 将上面的文档转换为HTML格式的表格形式

 

ContractedBlock.gif ExpandedBlockStart.gif student.xslt
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:template match="/">
        
<html>
            
<head>
                
<title/>
            
</head>
            
<body>
                
<center>
                    
<table border="1">
                        
<xsl:apply-templates select="//student"/>
                    
</table>
                
</center>
            
</body>
        
</html>
    
</xsl:template>
    
<xsl:template match="student">
        
<xsl:element name="tr">
            
<xsl:element name="td">
                
<xsl:value-of select="@no">
                
</xsl:value-of>
            
</xsl:element>
            
<xsl:element name="td">
                
<xsl:value-of select="name">
                
</xsl:value-of>
            
</xsl:element>
            
<xsl:element name="td">
                
<xsl:value-of select="age">
                
</xsl:value-of>
            
</xsl:element>
            
<xsl:element name="td">
                
<xsl:value-of select="sex">
                
</xsl:value-of>
            
</xsl:element>
            
<xsl:element name="td">
                
<xsl:value-of select="mobile">
                
</xsl:value-of>
            
</xsl:element>
        
</xsl:element>
    
</xsl:template>
</xsl:stylesheet>

 

这样就会显示HTML表格了,可以进行预览。(开发工具 Altova XML Spy 2006 破解版)

附加:在xslt里面也有foreach,if等语句。一下是一个很简单的例题:

 

ContractedBlock.gif ExpandedBlockStart.gif foreach_code
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
<xsl:template match="/">
        
<html>
            
<head>
                
<title>the way of for-each using</title>
            
</head>
            
<body>
            
<center>
                
<table border="1">
                    
<xsl:for-each select="students/student">
                        
<xsl:sort order="ascending" select="age"/>
                        
<tr>
                            
<td>
                                
<xsl:if test="age>=20">
                                
<font color="green">
                                    
<xsl:value-of select="name"/>
                                
</font></xsl:if>
                                
<xsl:if test="age &lt;20">
                                
<font color="red">
                                
<xsl:value-of select="name"/>
                                
</font>
                                
</xsl:if>
                            
</td>
                            
<td>
                                
<xsl:value-of select="age"/>
                            
</td>
                        
</tr>
                    
</xsl:for-each>
                
</table>
                
</center>
            
</body>
        
</html>
    
</xsl:template>
</xsl:stylesheet>

 

 

 

转载于:https://www.cnblogs.com/tomin/archive/2009/01/11/1373771.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值