大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 网页设计 -> HTML/CSS -> 跟我学XSL(一)

跟我学XSL(一)

时间: 2021-07-31 作者:daque

跟着internet的兴盛,越来越多的消息加入互联网络,消息的调换、检索、生存及再运用等急迫的需要使html这种最常用的标志谈话已越来越应接不暇。html将数据实质与展现融为一体,可窜改性、数据可检痛快差,而xml模仿了html与数据库、步调谈话的便宜,将实质与展现划分,不只使检索更为简单,更重要的是用户之间数据的调换越发简单,可重用性更强。  xml是一种元标志谈话,没有很多恒定的标志,为web开拓职员供给了更大的精巧性。当咱们运用html时,标志不过大略的表白实质的表露情势,而与表白的实质没有任何关系,为文书档案的进一步处置带来极大的未便。比方要表白部分简历,用html的表白办法如次:

<html><body><table border=1 cellspacing=0><th>全名<td>禹希初<th>性别<td>男<th>华诞<td>1977.5<tr><th>本领<td colspan=5>数据库安排与保护、web开拓</table></body></html>

全名

禹希初

性别

华诞

1977.5

本领

跟我学xsl(一)图1

数据库安排与保护、web开拓

上例在欣赏器中的格式

  在这边,咱们没辙从标志th、td得悉其实质表白什么,即使用xml,相映的文书档案(文献名:部分简历.xml)就可写成如次情势:

<?xml version="1.0" encoding="gb2312"?><resume><name>禹希初</name><sex>男</sex><birthday>1977.5</birthday><skill>数据库安排与保护、web开拓</skill></resume>

上例在欣赏器中的格式(ie5.0或革新本子)

跟我学xsl(一)图2

证明:

  version──规则了xml文书档案的本子,此处只能是1.0;

  encoding── 此处规则了xml文书档案的源代码典型,此处取值为"gb2312",也即是"简体华文"。

  比较两例,运用xml咱们不妨做到自设置标志,用标志表白实质的含意。如许在internet上交谈材料时,为用计划机处置文书档案供给了极大的简单,同声咱们观赏源文献时也不会被第一次全国代表大会堆方法弄得昏头昏脑。

  但是,因为xml并没成器标志规则表露办法,即使咱们在参观器中察看之上两个文书档案(倡导运用ie5.0或革新本子),咱们将看到xml文书档案并没有以诸如表格的办法来表露。莫非咱们就不许像html一律表露文书档案吗?回复能否定的。以部分简历为例,须要另建一个方法文献证明各个标志的表露办法,其实质如次(假如文献名为resume.css):

resume{ display: block;}name{ display: block; font-size:120%;}sex{ display:block; text-indent:2em}birthday{ display:block; text-indent:2em}skill{ display:block; text-indent:2em}

证明:

  之上均为css款式,倡导读者群参考相关材料熟习css,在此后进修中必需用到,此处因为篇幅联系不作引见。创造文献resume.css后,在部分简历.xml文献的第一条龙后增添以次笔墨:

<?xml:stylesheet type="text/css" href="resume.css"?>

上例在欣赏器中的格式(ie5.0或革新本子)

证明:

  此处表白援用一个外部css款式文献,个中type规则款式典型(可取值为text/css或text/xsl),href规则文献路途。

  生存文献,再以ie5.0翻开文献。如何样?方法有些不一律吧。好象还不令人合意,文书档案实质是明显了,但表露功效比html编写的文书档案就差得多了,xml编写的文书档案就只能以这种办法表露吗?!

提醒:

  1. 为了更好的领会与控制xml,倡导大师熟习html 4.0与css 2.0语法;控制javascript、vbscript中起码一种;编制程序体味、对数据库表面与sql的领会均能使大师在进修xml时获益。

  2. xml文书档案中标志必需成对展示,即使是空标志也必需有前加"/"的同名标志中断,或运用此种文式<xml_mark/>表白空标志。

  3. xml以及底下将要引见的xsl文书档案,属性值必需用双引号(")或单引号(’)括起来。

  4. xml文书档案必需是良构的(xsl文书档案也是xml文书档案中一种),也即是说标志必需有中断标志、标志不妨嵌套但不行穿插,如:

<outer><inner></inner><inner/></outer>

是正当的,而底下的情势

<outer><inner></outer></inner>

则是缺点的。即使xml文书档案在欣赏时堕落,大都是违犯了上头提到的准则。[page]

跟我学xsl(一)图3

本期咱们讲到用css(层叠款式表)来方法化xml文书档案,其功效并不很令人合意。本质上css用来方法化html标志比拟符合些,不过由于它大略才在上例中沿用。  xml在更多的功夫不过一种数据文献,还好吗将它变为咱们凡是所看到的html方法那么的文献呢?即使咱们将xml文献比方构造化的材料的话,那么xsl就犹如"筛子"与"模型",筛子采用本人须要的材料,那些材料再经过模型产生最后的产物:html。  这个模型大概是如许:咱们先安排好展现的页面,再将个中须要从xml中获得数据来弥补实质的局部"挖掉",而后用xsl语句从xml中筛出关系的数据来弥补。一言以譬之:这xsl本质上即是html的一个"壳子",xml数据运用这个"壳"来天生"保守"的html。  xml在打开时是一个树形构造,咱们将树形构造中自设置标志称为节点,节点之间生存爷儿俩、伯仲联系,咱们要考察个中的结点从根结点就要以"/"来层层加入。  在xsl这个壳中,咱们要从材料库xml里索取关系的数据,就要用到xsl供给的形式化查问谈话。所谓形式化查问谈话,即是经过关系的形式配合准则表白式从xml里索取数据的一定语句,即咱们上头所说的"筛子"。

  参考微软的"xsl开拓者指南",咱们大概可将形式谈话分为三种:

  采用形式:<xsl:for-each>、<xsl:value-of>和 <xsl:apply-templates>

  尝试形式:<xsl:if> 和<xsl:when>

  配合形式:<xsl:template>  咱们此刻就辨别对之举行引见。  一、 采用形式  采用形式语句将数据从xml中索取出来,是一种大略赢得数据的本领,这几个标志都有一个select属性,采用xml中一定的结点卯的数据。  1、<xsl:for-each>  如在xml中有如许的数据:<author><name>小禹</name><name>春华</name><name>秋实</name></author>  咱们要读取这三个作家名字,是一个一个地按"author/name"本领来读取吗,可有多个如许的name呀?即使有一种步调性的语句来轮回读取有多好啊!  想得很对,xsl供给了如许的具备步调谈话本质的语句:<xsl:for-each>  用它读取这三个作家名字的本领如次:<xsl:for-each select="author/name">……</xsl:for-each>  select,望文生义,采用,它不妨选定xml中一定独一的标志,也不妨采用某一类沟通的标志,咱们称之为结点集。  语法:<xsl:for-each select="pattern" order-by="sort-criteria-list">  属性:  1.select  按照xsl款式查问参观左右文以确定哪类结点集(满意select前提)运用此款式刻画。动作一种简化的表白即是,即使你想对文书档案中的某一种标志的实质的表露办法举行方法化,就不妨将让select即是此元素的标志名。比方欲对标志xml_mark举行方法化,即可用如次办法表白:<xsl:for-each select="xml_mark"><!--款式设置--></xsl:for-each>  2.order-by  以分号(;)分割、动作排序规范的列表。在列表元素前增添减号(+)表白按此标志的实质以叶序排序,增添减号(-)表白逆序排序。动作一种简化的表白即是,排序规范列表即是由select规则的标志的子标志的序列,每个标志之间以(;)分割。

  2、<xsl:value-of>  <xsl:for-each>形式不过采用节点,并没有掏出节点的值,比如山公不过爬到了树的某个枝干上,那么就用< xsl:value-of >来摘"成功果子"吧!  语法:<xsl:value-of select="pattern">索取节点的值  属性:  select用来与暂时左右文配合的xsl格局。大略的讲,即使要在xsl文书档案某处插入某个xml标志(假设是xml_mark标志)的实质,可用如次办法表白:<xsl:value-of select="xml_mark"></xsl:value-of>  或<xsl:value-of select="xml_mark"/>示例:  此处仍以本期的部分简历的动作例子,咱们须要对文献(部分简历.xml)作确定窜改,真实的说是将个中的第二行:<?xml:stylesheet type="text/css" href="resume.css"?>  窜改为:<?xml:stylesheet type="text/xsl" href="resume.xsl"?>  而后创造一个新文献:resume.xsl,其实质如次:<?xml version="1.0" encoding="gb2312"?><html xmlns:xsl="http://www.w3.org/tr/wd-xsl"><head><title>部分简历</title></head><body> <xsl:for-each select="resume"><p/><table border="1" cellspacing="0"><caption style="font-size: 150%; font-weight: bold">部分简历</caption><tr><th>全名</th><td><xsl:value-of select="name"/></td><th>性别</th><td><xsl:value-of select="sex"/></td><th>华诞</th><td><xsl:value-of select="birthday"/></td></tr><tr><th>本领</th><td colspan="5"><xsl:value-of select="skill"/></td></tr></table></xsl:for-each></body></html>

上例在欣赏器中的格式(ie5.0或革新本子)

  实行那些此后再来让咱们看一下发愤处事的功效,如何样?功效不错吧。更酷还在反面呢。此刻咱们对文献(部分简历.xml)作进一步的窜改:  1.在标志<resume>前增添一个新标志<document>;  2.将标志对<resume></resume>之间的实质(囊括这一对标志)复制并粘贴在后来,并在结果用<document>中断。  3.以notepad.exe翻开文献resume.xsl,在标志<html>之后增添笔墨:<xsl:for-each select="document">;在标志</html>之前增添笔墨:</xsl:for-each>,生存文献。  4.在欣赏器中翻开文献(部分简历.xml)。看到了什么?两份部分简历!

上例在欣赏器中的格式(ie5.0或革新本子)

  就如许,运用xml咱们不妨编写实质与款式实行辨别的文书档案!固然,xsl文献比普遍的html文献要搀杂少许,但是一旦实行则可用来方法化一切同类的xml文书档案。[page]

过程前几日的进修,咱们进修了xhtml文书档案的编写和以及三个xsl元素,已能编写十分精巧的xsl文书档案,即日将进修的是xsl沙盘的编写。咱们都领会,短的文书档案、步调格外好读,但当范围增大后,其搀杂性也以更快的速率减少。

跟我学xsl(一)图4

  前方咱们学了<xsl:for-each>、<xsl:value-of>等,不妨用它们对xml数据实行大略的方法化输入,但即使遇到比拟搀杂的xml方法输入,将xsl依照诉求顺序写下来的话,一是安排艰巨,可扩充性差,倒霉于职员之间的单干协调;另则,可窜改性很差,大概会展示牵一发而动三军的情景,倒霉于保护。步调中模块化安排渐渐细化的本领在这边获得了运用!

  xsl沙盘将xsl的安排细化成一个个沙盘(块),结果再将那些沙盘(块)拉拢成一个完备的xsl;比如船与集装箱,咱们不是将一切的货色一件件地堆起来,而是装在各自的集装箱中,而后再在船大将那些集装箱堆放起来。这种本领不妨使你先从完全上商量所有xsl的安排,而后将少许展现情势细化成各别的模块,再简直安排那些模块,结果将它们调整在一道,如许,将直观与微观贯串起来,适合人们层次化、典型化诉求。

  装集装箱--抄写沙盘(块):<xsl:template>

  语法:<xsl:template match="node-context" language="language-name">

  属性:

  match ── 决定怎么办的情景下实行此沙盘。动作一种简化的证明,在此处运用标志的名字;个中最表层沙盘必需将match设为"/"。

跟我学xsl(一)图5

  language ── 决定在此沙盘中实行什么剧本谈话,其取值与html中的script标志的language属性的取值沟通,缺省值是jscript。

  <xsl:template>用match属性从xml采用满意前提的节点,征对那些一定的节点产生一个一定输入情势的沙盘。

  吊集装箱上船--挪用沙盘(块):<xsl:apply-templates>

  语法:

<xsl:apply-templates select="pattern" order-by="sort-criteria-list">

属性:

  select ── 决定在此左右文情况中应实行什么沙盘,即采用用< xsl:template >标志创造的沙盘(块)。

  order-by ── 以分号(;)分割的排序规范,常常是子标志的序列。

  示例:

  以部分简历为例,为便于处置咱们蓄意"本领"中每一项都用标志对<skill></skill>括起来,有几何项本领就有几何个这种标志对,过程窜改后的部分简历xml文书档案实质如次:

<?xml version="1.0" encoding="gb2312"?><?xml:stylesheet type="text/xsl" href="resume_template.xsl"?><document><resume><name>禹希初</name><sex>男</sex><birthday>1977.5</birthday><skill>数据库安排与保护</skill><skill>web开拓</skill></resume></document>  而后,创造一个新xsl文献resume_template.xsl,沿用沙盘的情势,其实质如次:<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"><!--根沙盘--><xsl:template match="/"><html><head><title>部分简历</title></head><body><xsl:apply-templates select="document/resume"/></body></html></xsl:template><!--简历沙盘--><xsl:template match="resume"><table border="1" cellspacing="0"><caption>部分简历(<xsl:eval>formatindex(childnumber(this),"i")</xsl:eval>)</caption><xsl:apply-templates select="name"/><xsl:apply-templates select="sex"/><xsl:apply-templates select="birthday"/><tr/><td>本领</td><td colspan="5"><table cellspacing="0"><xsl:apply-templates select="skill"/></table></td></table><br/></xsl:template><!--全名沙盘--><xsl:template match="name"><td>全名</td><td><xsl:value-of/></td></xsl:template><!--性别沙盘--><xsl:template match="sex"><td>性别</td><td><xsl:value-of/></td></xsl:template><!--华诞沙盘--><xsl:template match="birthday"><td>华诞</td><td><xsl:value-of/></td></xsl:template><!--本领沙盘--><xsl:template match="skill"><tr><td><xsl:value-of/></td></tr></xsl:template></xsl:stylesheet>

上例在欣赏器中的格式(ie5.0或革新本子)

跟我学xsl(一)图6

  生存文献,翻开文献(部分简历.xml),功效令人合意吧。本来要做到同样的功效,用前方三周引见的本领也可做,但你得把它动作一完全商量。  在上头的xsl文献中,咱们将性别、华诞、本领等数据项辨别用沙盘来独立写,再用<xsl:apply-template>来挪用,如许,纵然你遥远要对那些沙盘作相映的窜改与夸大也很简单,不致于展示互关系扰、搀杂不清的情景。这种从上至下、逐层细化的安排本领,极地面缩小处事搀杂水平,也大大缩小了缺点的爆发,不妨实行多人的协调安排。

  提防:即使xml文书档案中各别标志有同名的子标志,在为其编写沙盘时,应把父标志动作其前缀,方法为(parent_mark/child_mark)。沙盘文献必需有一个根沙盘,其属性match是"/"。[page]

xml本领的上风之一就在乎数据输入的可采用性,即采用须要的数据输入。前方咱们所讲到的采用形式语句:<xsl:for-each>、<xsl:value-of>及<xsl:apply-template>不过大略的采用经过"/"标记层层达到的节点,即使咱们对xml数据不须要十足输入,而只须要个中的满意某前提的局部数据,"莱菔小白菜、各取所需",那么前提确定<xsl:if>与多前提确定<xsl:choose>及<xsl:when>则逢迎了这种须要,即使你对步调安排熟习的话,会感触它们素昧平生。

  xsl中的if,开始,引见xsl元素<xsl:if>的语法构造:

  语法:

<xsl:if expr="script-expression" language="language-name" test="pattern">

  属性:

  expr ── 剧本谈话表白式,计划截止为"真"或"假";即使截止为"真",且经过test,则在输入中表露个中实质(可简略此项属性)。

  language ── expr属性中表白式的剧本谈话典型,其取值与html标志script的language属性的取值沟通,缺省为"jscript"。  test ──源数据尝试前提。

  示例:

  此处以一份报表为例,文献名为report.xml,其实质如次:

<?xml version="1.0" encoding="gb2312"?><?xml:stylesheet type="text/xsl" href="report.xsl"?><document><report><class>甲班</class><q1>50</q1><q2>70</q2><q3>30</q3><q4>10</q4></report><report><class>乙班</class><q1>20</q1><q2>30</q2><q3>40</q3><q4>50</q4></report><report><class>丙班</class><q1>70</q1><q2>40</q2><q3>20</q3><q4>10</q4></report></document>

  咱们沿用xsl沙盘贯串即日所学的<xsl:if>,为其编写一个xsl文书档案,诉求季度产量小于即是20的用赤色表白,文献名为report.xsl,实质如次:

<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl">

<xsl:template match="/"><html><head><title>1999年消费统计</title></head> <body><xsl:apply-templates select="document"/></body></html></xsl:template>

<xsl:template match="document"><h3>1999年消费统计</h3> <table border="1" cellspacing="0"> <th>班组</th><th>四季度</th><th>二季度</th><th>三季度</th><th>四序度</th><xsl:apply-templates select="report"/></table></xsl:template>

<xsl:template match="report"><tr><td><xsl:value-of select="class"/></td><td><xsl:apply-templates select="q1"/></td><td><xsl:apply-templates select="q2"/></td><td><xsl:apply-templates select="q3"/></td><td><xsl:apply-templates select="q4"/></td></tr></xsl:template>

<xsl:template match="q1|q2|q3|q4"><!--此处尝试产量,如小于即是20则增添一style属性color,其值为red(赤色)--> <xsl:if test=".[value()$le$20]"> <xsl:attribute name="style">color:red</xsl:attribute></xsl:if><xsl:value-of/></xsl:template>

</xsl:stylesheet>

上例在欣赏器中的格式(ie5.0或革新本子)

  证明:

  q1|q2|q3|q4 ── 标志q1、q2、q3、q3均用此沙盘决定输入

跟我学xsl(一)图7

  $le$ ── 是联系演算符中的"小于即是",其它联系有小于($lt$)、大于($gt$)、大于即是($ge$)、即是($eq$)、不即是($ne$)等。

跟我学xsl(一)图8

  . ── 表白援用暂时标志。

  [ ] ── 表白挑选,惟有满意挑选前提的标志本领被采用。

  value() ──xsl因变量,其余常用xsl因变量有text()、end()、index()等。

  下期,咱们将进修xsl的其余三个元素,可对同一数据举行屡次尝试,按照各别前提爆发相映输入。[page]

本期咱们进修了xsl元素<xsl:if>,已能经过尝试xml数据的值来确定各别的输入情势,不知你试验过没有,本质上<xsl:for-each>也可局部实行<xsl:if>的功效,但偶尔,咱们蓄意对同一数据同声尝试多个前提,按照各别前提输入相映截止。固然,咱们不妨用if,假设咱们惟有if可用的话。好在咱们有一个更好的采用,那即是用<xsl:choose>。底下引见关系元素的语法:  <xsl:choose>  语法:<xsl:choose>  属性:无,表白一个多选尝试的发端

  <xsl:when>  语法:<xsl:when expr="script-expression" language="language-name" test="pattern">  属性:  expr ── 剧本谈话表白式,计划截止为"真"或"假";即使截止为"真",且经过test,则在输入中表露个中实质(可简略此项属性)。  language ── expr属性中表白式的剧本谈话典型,其取值与html标志script的language属性的取值沟通,缺省为"jscript"。  test ── 源数据尝试前提。

  <xsl:otherwise>  语法:<xsl:otherwise>  属性:无,在一个多选尝试中,即使没有不满意<xsl:when>规则的前提,即使在结果有此标志,则输入此标志中的实质。

  示例:

  此处以学天生绩单为例,诉求按功效的上下给出特出( >85)、普遍(70~85)、合格(60~69)、不迭格(< 60),而不是表露分数。个中功效单的xml文书档案(文献名:grade.xml)如次:<?xml version="1.0" encoding="gb2312"?><?xml:stylesheet type="text/xsl" href="grade.xsl"?><document><grade><name>大胖</name><english>80</english><math>90</math><chymest>90</chymest></grade><grade><name>小花</name><english>98</english><math>70</math><chymest>85</chymest></grade></document>

  为实行按分数分等第表露,其xsl文书档案(文献名:grade.xsl)实质如次:

<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"><xsl:template match="/"><html><head><title>功效单</title></head><body><xsl:apply-templates select="document"/></body></html></xsl:template>

<xsl:template match="document"><table border="1" cellspacing="0"><th>全名</th><th>英语</th><th>数学</th><th>化学</th><xsl:apply-templates select="grade"/></table></xsl:template>

<xsl:template match="grade"><tr><td><xsl:apply-templates select="name"/></td><td><xsl:apply-templates select="english"/></td><td><xsl:apply-templates select="math"/></td><td><xsl:apply-templates select="chymest"/></td></tr></xsl:template>

<xsl:template match="name"><xsl:value-of/></xsl:template>

<xsl:template match="english|math|chymest"><xsl:choose><xsl:when test=".[value()$gt$85]">特出</xsl:when><xsl:when test=".[value()$gt$70]">普遍</xsl:when><xsl:when test=".[value()$gt$60]">起格</xsl:when><xsl:otherwise>不起格</xsl:otherwise></xsl:choose></xsl:template>

</xsl:stylesheet>

上例在欣赏器中的格式(ie5.0或革新本子)

  证明:在<xsl:choose>采用中,从第一个<xsl:when>发端,逐一尝试,直到满意一个尝试前提就将个中的实质输入,不复尝试反面的前提;即使不满意任何一个前提,则输入<xsl:otherwise>中的实质。  标志对<xsl:when></xsl:when>与<xsl:otherwise></xsl:otherwise>中可嵌套<xsl:if>或<xsl:choose>。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.