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"标签只有一个所有匹配完成结束.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值