`
禹爸爸
  • 浏览: 85764 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

XML与XSLT

    博客分类:
  • XML
xml 
阅读更多

之前有谈过XML与CSS的搭配,可以让用户拥有多种数据显示样式。但这种搭配亦有不足之处,首先编写者必须了解和掌握XML和CSS两种语法规则,无形中增加了编写者的知识成本;其次,编写者无法对数据进行查询性的显示,即通过XML与CSS的搭配只能将所有数据全部显示出来,无法实现只显示符合某种条件的数据。

为了降低编写者的知识成本,W3C组织又在XML文件基础之上定义了新的样式文件 -- XSLT(eXtended Stylesheet Language Transformation)。它遵循XML语法要求,编写者只要会写XML文件,就能够写出简单的XSLT文件。

<?xmlversion=”1.0”encoding=”GB2312”?>
<xsl:stylesheetversion=”1.0”xmlns:xsl=”http:/www.3w.org/1999/XSL/Transform”>
<!--Formattingcommandsforthisdocumentasawhole-->
</xsl:stylesheet>

XSLT样式文件使用模板(Template)系统来匹配XML文件中的内容,并规定如何处理它们。一旦某个模板匹配上了XML中的一个元素,就会将模板内容应用到该元素上。使用xsl:value-of可以查询出XML中指定结点的值,使用xsl:for-each,xsl:choose、xsl:when和xsl:otherwise,xsl:if元素可以对数据实现循环查询和条件条件。

XSLT样式文件中必须有一个与XML文档根元素匹配的模板。

<?xmlversion="1.0"encoding="utf-8"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:templatematch="/">
<html>
<head>
<title>XSLT样式表文件使用举例</title>
</head>
<bodystyle="text-align:center">
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

每个模板以<xsl:template>标记开始,结束与</xsl:template>。其match属性说明该模板将会应用到XML中的哪个元素上去,“/”表示XML文档的根元素。

下面我们用一个具体的例子来说明。假设有一个用于存储用户在网上购物信息的XML文件,其内容如下:

<?xmlversion="1.0"encoding="gb2312"?>
<?xml-stylesheettype=”text/xsl”href=”Test.xsl”?>
<shoppingcart>
<customer>
<name>赵子龙</name>
<email>Jerry@wlw.gor</email>
<zipcode>361021</zipcode>
<address>中国福建省厦门市</address>
</customer>
<shoppingItem>
<item>
<itemNo>1001</itemNo>
<itemName>三国演义</itemName>
<price>30.00</price>
<publisher>文艺出版社</publisher>
</item>
<item>
<itemNo>2001</itemNo>
<itemName>红楼梦</itemName>
<price>120.00</price>
<publisher>文艺出版社</publisher>
</item>
</shoppingItem>
</shoppingcart>

我们为其编写一个XSLT文件,如下:

<?xmlversion=”1.0”encoding=”gb2312”?>
<xsl:styleshetversion=”1.0”xmlns:xsl=”http://www.3w.org/1999/XSL/Transform”>
<xsl:templatematch=”/”>
<html>
<head>
<title>书籍订单</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:templatematch=”shoppingcart”>
<body>
<xsl:apply-templates/>
</body>
</xsl:template>
<xsl:templatematch=”shoopingcart/customer”>
<divstyle=”background-color:teal;font-weight:bold;”>
<xsl:value-ofselect=”name”/>
<xsl:value-ofselect=”email”/>
<xsl:value-ofselect=”zipcode”/>
<xsl:value-ofselect=”address”/>
</div>
</xsl:template>
<xsl:templatematch=”shoppingcart/shoppingItem”>
<tableborder=”1”>
<thead>
<td><b>编号</b></td>
<td><b>书名</b></td>
<td><b>价格</b></td>
<td><b>出版社</b></td>
</thead>
<xsl:for-eachselect=”item”order-by=”-itemNo”>
<tr>
<td><b><xsl:value-ofselect=”itemNo”/></b></td>
<td><b><xsl:value-ofselect=”itemName”/></b></td>
<td><b><xsl:value-ofselect=”price”/></b></td>
<td><b><xsl:value-ofselect=”publisher”/></b></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

上面的样式文件中共定义了四个模板,分别对应XML文件的根元素、ShoppingCart元素、ShoppingCart/Customer元素、以及ShoppingCart/ShoppingItem元素。

在XML文件中通过

<?xml-stylesheettype=”text/xsl”href=”Test.xsl”?>

将XML文件与欲使用的XSL样式文件关联起来。当浏览器打开XML文件时,XSL解析器会将XSL文件加载,偶后开始遍历XML文件中的所有结点,在每一步都试图将当前结点与模板进行匹配。XSL解析器首先查找根结点,与根结点对应的模板是

<xsl:templatematch=”/”>
<html>
<head>
<title>书籍订单</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>

此模板用于创建输出文档的根元素:html和head。在遇到xsl:apply-templates时,解析器移到当前结点的子结点并复复这个过程,即试图将子结点与其他模板匹配。因为当前结点是根结点,它只有一个子结点ShoppingCart,所以解析器找到与ShoppingCart相匹配的模板进行匹配

<xsl:templatematch=”shoppingcart”>
<body>
<xsl:apply-templates/>
</body>
</xsl:template>

根据模板,解析器创建输出文档的Body结点。此时又遇到xsl:apply-templates,因此解析器又查找当前结点的子结点进行模板匹配。ShoppingCart有两个子结点,解析器首先找到与Customer结点匹配的模板,进行转换入理,由此在输出文档中生成顾客的联系信息。这个模板中不含有xsl:apply-templates,因为已经处理了Customer中的所有子结点,无需再向下遍历,所以解析器处理完该结点后,即返回上层结点,然后再查找ShoppingCart结点的其他子结点。

<xsl:templatematch=”shoppingcart/shoppingItem”>
<tableborder=”1”>
<thead>
<td><b>编号</b></td>
<td><b>书名</b></td>
<td><b>价格</b></td>
<td><b>出版社</b></td>
</thead>
<xsl:for-eachselect=”item”order-by=”-itemNo”>
<tr>
<td><b><xsl:value-ofselect=”itemNo”/></b></td>
<td><b><xsl:value-ofselect=”itemName”/></b></td>
<td><b><xsl:value-ofselect=”price”/></b></td>
<td><b><xsl:value-ofselect=”publisher”/></b></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

这个模板在输出文档中列出顾客订购的书籍清单,由于顾客可能一次订购多本书籍,故使用了xsl:for-each进行了循环处理,并为指定书籍按其序列号进行排列。

到此,完成整个XML文档的转换并输出。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    xml与xslt应用手册

    总的来说,"XML与XSLT应用手册"涵盖了从基础到高级的XML和XSLT知识,包括XML的创建、解析、Java中的XML处理、数据库与XML的交互、以及XML在分布式系统和企业级通信中的应用。通过这个手册,无论是初学者还是经验丰富...

    xslt控制xml样式并被html、c#后台调用

    《XSLT控制XML样式:HTML与C#后台调用详解》 在信息化时代,数据交换和展示方式的灵活性至关重要。XML(可扩展标记语言)因其结构化特性,成为数据存储和传输的理想选择,但其原始格式并不适合直接在网页上展示。...

    XML XML Schema XSLT 2.0和XQuery开发详解源代码.rar

    这个压缩包“XML XML Schema XSLT 2.0和XQuery开发详解”包含了与这些技术相关的源代码示例。这些示例通常会涵盖以下方面: 1. **XML文档结构**:示例可能包括不同类型的XML文档,展示如何创建符合XML语法规则的...

    Delphi下最好用的XML/XSLT组件DIXML最新版本无需密码效率超高

    5. **示例与文档**:提供的"Demos"目录包含了多个示例项目,这些示例代码展示了如何使用DIXML组件进行XML解析和XSLT转换,帮助开发者更快地理解和应用。同时,"DIXml.chm"是组件的帮助文件,包含了详细的API参考和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...

    javascript xml xsl xslt

    JavaScript、XML、XSL与XSLT是Web开发中四个重要的技术组件,它们在数据处理、页面动态化和跨平台信息交换中起着至关重要的作用。以下是对这些技术的详细解释: JavaScript,全称为ECMAScript,是一种广泛应用于...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...

    java中使用xslt转换xml成为另一个xml

    在Java编程环境中,XML(可扩展标记语言)和XSLT(可扩展样式表语言转换)是处理和转换XML文档的常见工具。XSLT是一种专门用于将XML文档转换为其他XML、HTML或文本格式的语言。本文将详细介绍如何在Java中使用XSLT来...

    xml加xslt转化成html

    xml加xslt转化成html的源代码!超有用的

    Xml+Xslt测试工具

    Xml+Xslt测试工具通常是开发者用来验证XML文档与XSLT转换效果的软件。这类工具通常具备以下功能: 1. **XML编辑器**:提供友好的界面,帮助用户创建、编辑和验证XML文档,检查其是否符合指定的DTD或Schema。 2. **...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part21

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part21

    JSP结合XML+XSLT将输出转换HTML

    XML(Extensible Markup Language)则是一种用于存储和传输结构化数据的标记语言,而XSLT(XSL Transformations)是用于转换XML文档的样式表语言。本篇将详细讲解如何利用JSP、XML和XSLT将XML数据转换为HTML格式,...

    XML笔记+XSLT中文入门

    《XML2.pdf》可能是更深入的XML技术探讨,涵盖了高级主题如DOM解析、SAX解析以及XML与数据库的交互。 在学习这些内容时,实践是至关重要的。尝试创建XML文档,编写XSLT转换,观察结果,不断调整和优化,这是掌握这...

    XML$XSLT$HTML$JAVASCRIPT转换实例

    6. JSON与XML互转:在某些情况下,XML数据可能需要先转换为JSON格式,因为JavaScript更自然地处理JSON数据。 总之,这个实例展示了XML、XSLT、HTML和JavaScript在Web开发中的协同工作,提供了一种灵活的方法来处理...

    xslt,xpath的例子和语法。非常全面。对于学习xml+xslt技术的人一定有帮助

    XSLT(eXtensible Stylesheet Language Transformations)是专门用来转换XML文档的样式表语言。XPath(XML Path Language)则是用于在XML文档中查找信息的语言,它可以选取节点、计算表达式以及执行其他查询任务。 ...

    XML_XSLT Maker 21.0

    XML_XSLT Maker 21.0 XML_XSLT Maker 21.0

    jsp_txl.rar_XML通讯录_java XSLT_java通讯录 xml_xslt_通讯录

    标题中的"jsp_txl.rar_XML通讯录_java XSLT_java通讯录 xml_xslt_通讯录"揭示了这个项目的核心内容,这是一个基于Java JSP技术,结合XML和XSLT(Extensible Stylesheet Language Transformations)来实现的通讯录...

    xml和xslt在Web开发中的应用

    XML(可扩展标记语言,eXtensible Markup Language)与XSLT(可扩展样式表语言转换,XSL Transformations)是Web开发中用于数据处理和格式化的重要工具。XML是一种标记语言,它允许开发者创建自定义的标签来结构化...

    xml入门经典(xslt部分)

    7. **模板的优先级与合并策略**:当多个模板匹配同一个节点时,XSLT有一套规则来决定哪个模板会被应用,包括优先级和模式的结合性。 学习XSLT的重要性: 1. **数据转换**:XSLT是XML数据转换的标准工具,可用于将...

Global site tag (gtag.js) - Google Analytics