`
xitong
  • 浏览: 6190391 次
文章分类
社区版块
存档分类
最新评论

XSL的解析过程

 
阅读更多


XSL的解析过程:

XSLT在进行转换时,首先遍历XML源文档树,找到要处理的节点,然后将定义好的模板信息施加到该节点中。

XML:

<?xml version="1.0" encoding="GB2312" standalone="no"?>
<?xml:stylesheet type="text/xsl" href="BBS2.xsl" ?>
<BBS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BBS.xsd">
<Root id="1">
<title>学习JAVA</title>
<content>请问各位如何学习JAVA?</content>
<sender>sunny</sender>
<sendTime>09-3-21</sendTime>
<isTop>0</isTop>
<isGood>0</isGood>
<answer id="1">
<title>学习JAVA</title>
<content>首先要有衡心,要耐得住寂莫.</content>
<sender>李胜光</sender>
<sendTime>09-3-21</sendTime>
</answer>
<answer id="1">
<title>学习JAVA</title>
<content>多打代码.</content>
<sender>lsg</sender>
<sendTime>09-3-21</sendTime>
</answer>
</Root>
<Root id="423bda04-2aa8-4f52-af75-641718c423da">
<title>什么是JSP</title>
<content>JSP是java server page!</content>
<sender>李胜光</sender>
<sendTime>Mon Mar 23 16:28:00 CST 2009</sendTime>
<isTop>0</isTop>
<isGood>0</isGood>
</Root>
<Root id="16eb57fb-d7fa-47a3-b33e-617968bd54a2">
<title>java概念</title>
<content>java的三大特性是什么?</content>
<sender>李胜光</sender>
<sendTime>Mon Mar 23 16:33:50 CST 2009</sendTime>
<isTop>0</isTop>
<isGood>0</isGood>
</Root>
<Root id="ec30d056-074e-4af1-9148-acf4500a86c8">
<title>java is good</title>
<content>java is good</content>
<sender>sunny</sender>
<sendTime>Tue Mar 24 08:25:24 CST 2009</sendTime>
<isTop>0</isTop>
<isGood>0</isGood>
</Root>
</BBS>

第一种方式的XSL:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
<title>BBS.xsl</title>
</head>
<body>
<h2 align="center">软件技术之家</h2>
<center>
<table border="1" width="80%">
<tr>
<td width="70%">标题</td>
<td width="15%">发帖者</td>
<td width="15%">发帖时间</td>
</tr>
<xsl:for-each select="BBS/Root">
<tr>
<td width="60%"><xsl:value-of select="title"/></td>
<td width="15%"><xsl:value-of select="sender"/></td>
<td width="30%"><xsl:value-of select="sendTime"/></td>
</tr>
</xsl:for-each>
</table>
</center>
</body>
</html>
</xsl:template>

</xsl:stylesheet>


过程分析:
首先解析转换器加载XML到内存形式一棵树,然后开始(自上而下)读XSL文件根据XSL文件中的 <xsl:template match="/">匹配器在树中进行节点查找定位,找到节点后把<xsl:template match="/">标签内的内容写入到目标html文件中,当遇到xsl命名空间中的标签时,执行标签相应的功能,如当遇到<xsl:for-each select="BBS/Root">时,在XML文档中进行结点循环匹配查找,每找到一个相应的结点取得相应的值.循环结束后返回,<xsl:template match="/">该句进行下一个"/"的匹配,由于"/"只有一个所以解析结束.


第二种方式的XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="BBS">
<html>
<head>
<title>软件技术之家</title>
</head>
<body>
<h2 align="center">软件技术之家2</h2>
<center>
<table border="1" width="80%">
<tr>
<td width="70%">标题</td>
<td width="15%">发帖者</td>
<td width="15%">发帖时间</td>
</tr>
<xsl:apply-templates select="Root"/>
</table>
</center>
</body>
</html>
</xsl:template>

<xsl:template match="Root">
<tr>
<td width="60%"><xsl:value-of select="title"/></td>
<td width="15%"><xsl:value-of select="sender"/></td>
<td width="30%"><xsl:value-of select="sendTime"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>

过程分析:
首先解析转换器加载XML到内存形式一棵树,然后开始(自上而下)读XSL文件根据XSL文件中的 <xsl:template match="BBS">匹配器在树中进行节点查找定位,先是找到XML中BBS结点在html文件中输出:
<html>
<head>
<title>软件技术之家</title>
</head>
<body>
<h2 align="center">软件技术之家2</h2>
<center>
<table border="1" width="80%">
<tr>
<td width="70%">标题</td>
<td width="15%">发帖者</td>
<td width="15%">发帖时间</td>
</tr>
系统看到了 <xsl:apply-templates select="Root"/>的指示,于是,它在XML源树中寻找标记为"Root"的节点进行匹配。就象函数调用一样,现在系统跳到了用<xsl:template match="Root">括起的“函数”中继续生成下面的HTML代码:
<tr>
<td width="60%"><xsl:value-of select="title"/></td>
<td width="15%"><xsl:value-of select="sender"/></td>
<td width="30%"><xsl:value-of select="sendTime"/></td>
</tr>
解析器继续匹配XML中的"Root"标签直到XML中没有Root标签才返回这样就可以得到多段上面的代码.<xsl:template match="Root">匹配完成返回后执行:
</table>
</center>
</body>
</html>
执行后继续进行标签"BBS"匹配,由于"BBS"标签只有一个所有匹配完成结束.

分享到:
评论

相关推荐

    无限菜单之 xml+popup 版(IE5.5+)

    这样:使用menu.xsl解析一级xml的内容生成一级菜单,如果该级xml中某节点有子节点,当鼠标经过该节点时,创建当前窗口/Popup窗口的子Popup窗口,使用menu.xsl解析子节点中xml的内容并输出显示到子Popup中,递归,...

    Java语言基础下载

    文档对象模型(DOM)解析实例 402 DOM对象 404 DOM解析的例子: 406 SAX解析实例 409 DOM4J解析实例 412 JDOM解析实例 413 JAVA操纵XML 实例讲解 414 通过JAVA写数据到XML里面 415 内容总结 418 独立实践 418 第二十...

    XML高级编程pdf

    5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX ...

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

    21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    XML高级编程 (Extensible Markup Language)

    5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX ...

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

    21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

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

    21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    XML 高级编程(高清版)

    5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX ...

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

    21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    XML高级编程

    5.2.3 DOM在出版过程中的应用 122 5.3 使用DOM和XML的应用实例 125 5.3.1 简单的客户端实例 125 5.3.2 更复杂的编程实例 133 5.4 DOM和XML的未来 143 5.4.1 W3C的工作 143 5.4.2 应用 144 5.4.3 数据库、模式和DOM ...

    X3-BLOG 博客源码

    X3-BLOG完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速 度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中...

    xml入门经典-part3(中文版)

    5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX ...

    X3BLOG AJAX国产大型开源多用户博客系统 1.1.0.beta1源码版

    X3-BLOG完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速 度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中...

    X3BLOG AJAX国产大型开源多用户博客系统 1.1.0.beta1编译版

    X3-BLOG完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速 度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中...

    asp.net知识库

    SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server) C# 获取...

    最新.net技术博客源代码.rar

    完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中速度最快的...

    在Ruby中处理XML和XSLT以及XPath的简单教程

    什么是 XML ? XML 指可扩展标记语言(eXtensible ... SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍,在扫描的过程中,每次遇到一个语法结构时,就会调用这个特定语法结构的事件处理程序,向应用程序发送

    eldamo:XML中的Elvish数据模型

    XML编辑和解析,包括XSL和XQuery 要求 吉特 Java 1.6以上 Gradle 2.6+(将下载其他依赖项) 一个好的文本编辑器(我在OS X上使用TextWrangler)。 为了生成网站,使用了一个Web搜寻器(我在OS X上使用SiteSucker)...

    XML,XSLT,AJAX三大技术打造开源多用户博客X3BLOG

    X3-BLOG完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中...

    shad0w:旨在在受严格监控的环境中秘密运行的后期开发框架

    通过将Donut与SHAD0W的过程注入功能一起使用,它使操作员能够在内存中完全执行.NET程序集,DLL,EXE,JS,VBS或XSL。 动态解析的系统调用大量用于避免钩住用户界面API,反DLL注入,从而使EDR很难将代码加载到信标中...

Global site tag (gtag.js) - Google Analytics