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>
我们现在就分别对之进行介绍。
一、选择模式
1、<xsl:for-each>
如在XML中有这样的数据:
<author>
<name>小禹</name>
<name>春华</name>
<name>秋实</name>
</author>
想得很对,XSL提供了这样的具有程序语言性质的语句<XSL:for-each>
<xsl:for-eachselect=”author/name”>
…….
<./xsl:for-each>
语法:
<xsl:for-eachselect="pattern"order-by="sort-criteria-list">
属性:
1.select
<xsl:for-eachselect="xml_mark">
<!--样式定义-->
</xsl:for-each>
2.order-by
以分号(;)分隔、作为排序标准的列表。在列表元素前添加加号(+)表示按此标记的内容以升序排序,添加减号(-)表示逆序排序。作为一种简化的表示就是,排序标准列表就是由select规定的标记的子标记的序列,每个标记之间以(;)分隔。
2、<xsl:value-of>
<xsl:for-each>模式只是选取节点,并没有取出节点的值,好比猴子只是爬到了树的某个枝干上,那么就用<xsl:value-of>来摘“胜利果实“吧!
语法:
<xsl:value-ofselect="pattern">提取节点的值
属性:
<xsl:value-ofselect="xml_mark"></xsl:value-of>
或
<xsl:value-ofselect="xml_mark"/>
示例:
<?xml:stylesheettype="text/css"href="resume.css"?>
修改为
<?xml:stylesheettype="text/xsl"href="resume.xsl"?>
然后建立一个新文件:resume.xsl,其内容如下:
<?xmlversion="1.0"encoding="GB2312"?>
<HTMLxmlns:xsl="http://www.w3.org/TR/WD-xsl">
<HEAD>
<TITLE>个人简历</TITLE>
</HEAD><BODY>
<xsl:for-eachselect="resume">
<P/>
<TABLEborder="1"cellspacing="0">
<CAPTIONstyle="font-size:150%;font-weight:bold">
个人简历
</CAPTION>
<TR>
<TH>姓名</TH><TD><xsl:value-ofselect="name"/></TD>
<TH>性别</TH><TD><xsl:value-ofselect="sex"/></TD>
<TH>生日</TH><TD><xsl:value-ofselect="birthday"/></TD>
</TR>
<TR>
<TH>技能</TH><TDcolspan="5"><xsl:value-ofselect="skill"/></TD>
</TR>
</TABLE>
</xsl:for-each>
</BODY>
</HTML>
完成这些以后再来让我们看一下辛勤劳动的成果,怎么样?效果不错吧。更酷还在后头呢。现在我们对文件(个人简历.xml)作进一步的修改:
1.在标记<resume>前添加一个新标记<document>;
2.将标记对<resume></resume>之间的内容(包括这一对标记)复制并粘贴在其后,并在最后用<document>结束。
3.以Notepad.exe打开文件resume.xsl,在标记<HTML>之后添加文字:<xsl:for-eachselect="document">;在标记</HTML>之前添加文字:</xsl:for-each>,保存文件。
就这样,利用XML我们可以编写内容与样式完成分离的文档!当然,XSL文件比一般的HTML文件要复杂一些,然而一旦完成则可用于格式化所有同类的XML文档。
XSL模板与匹配模式
经过前几日的学习,我们学习了XHTML文档的编写和以及三个XSL元素,已能编写相当灵活的XSL文档,今天将学习的是XSL模板的编写。我们都知道,短的文档、程序十分好读,但当规模增大后,其复杂性也以更快的速度增加。
前面我们学了<xsl:for-each>、<xsl:value-of>等,可以用它们对XML数据实现简单的格式化输出,但如果遇到比较复杂的XML格式输出,将XSL按照要求依次写下来的话,一是设计困难,可扩展性差,不利于人员之间的分工协作;另则,可修改性很差,可能会出现牵一发而动全军的情况,不利于维护。程序中模块化设计逐步细化的方法在这里得到了应用!
装集装箱??书写模板(块):<xsl:template>
<xsl:template>
语法:
<xsl:templatematch="node-context"language="language-name">
属性:
match──确定什么样的情况下执行此模板。作为一种简化的说明,在此处使用标记的名字;其中最上层模板必须将match设为“/”
language──确定在此模板中执行什么脚本语言,其取值与HTML中的SCRIPT标记的LANGUAGE属性的取值相同,缺省值是Jscript
<xsl:template>用match属性从XML选取满足条件的节点,征对这些特定的节点形成一个特定输出形式的模板。
吊集装箱上船-??调用模板(块):<xsl:apply-templates>
<xsl:apply-templates>
语法:
<xsl:apply-templatesselect="pattern"order-by="sort-criteria-list">
属性:
select──确定在此上下文环境中应执行什么模板,即选取用<xsl:template>标记建立的模板(块)。
order-by──以分号(;)分隔的排序标准,通常是子标记的序列
示例:
以个人简历为例,为便于处理我们希望“技能”中每一项都用标记对<skill></skill>括起来,有多少项技能就有多少个这种标记对,经过修改后的个人简历XML文档内容如下:
<?xmlversion="1.0"encoding="GB2312"?>
<?xml:stylesheettype="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,采用模板的形式,其内容如下:
<?xmlversion="1.0"encoding="GB2312"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl">
<!--根模板-->
<xsl:templatematch="/">
<HTML><HEAD><TITLE>个人简历</TITLE></HEAD>
<BODY>
<xsl:apply-templatesselect="document/resume"/>
</BODY>
</HTML>
</xsl:template>
<!--简历模板-->
<xsl:templatematch="resume">
<TABLEborder="1"cellspacing="0">
<CAPTION>个人简历(
<xsl:eval>formatIndex(childNumber(this),"I")</xsl:eval>
)</CAPTION>
<xsl:apply-templatesselect="name"/>
<xsl:apply-templatesselect="sex"/>
<xsl:apply-templatesselect="birthday"/>
<TR/>
<TD>技能</TD><TDCOLSPAN="5">
<TABLEcellspacing="0">
<xsl:apply-templatesselect="skill"/>
</TABLE>
</TD>
</TABLE>
<BR/>
</xsl:template>
<!--姓名模板-->
<xsl:templatematch="name"><TD>姓名</TD>
<TD><xsl:value-of/></TD>
</xsl:template>
<!--性别模板-->
<xsl:templatematch="sex"><TD>性别</TD>
<TD><xsl:value-of/></TD>
</xsl:template>
<!--生日模板-->
<xsl:templatematch="birthday"><TD>生日</TD>
<TD><xsl:value-of/></TD>
</xsl:template>
<!--技能模板-->
<xsl:templatematch="skill">
<TR><TD><xsl:value-of/></TD></TR>
</xsl:template>
</xsl:stylesheet>
注意:
如果XML文档中不同标记有同名的子标记,在为其编写模板时,应把父标记作为其前缀,格式为(parent_mark/child_mark)。
模板文件必须有一个根模板,其属性match是“/”。
注:如果拷贝源代码,请将空格删除
测试模式
XML技术的优势之一就在于数据输出的可选择性,即选择需要的数据输出。前面我们所讲到的选择模式语句:<xsl:for-each>、<xsl:value-of>及<xsl:apply-template>只是简单的选取通过”/”符号层层到达的节点,如果我们对XML数据不需要全部输出,而只需要其中的满足某条件的部分数据,“萝卜青菜、各取所需“,那么条件判断<xsl:if>与多条件判断<xsl:choose>及<xsl:when>则迎合了这种需要,如果你对程序设计熟悉的话,会觉得它们似曾相识。
XSL中的IF,首先,介绍XSL元素<xsl:if>的语法结构:
<xsl:if>
语法:
<xsl:ifexpr="script-expression"language="language-name"test="pattern">
属性:
expr──脚本语言表达式,计算结果为“真”或“假”;如果结果为“真”,且通过test,则在输出中显示其中内容(可省略此项属性)。
示例:
<?xmlversion="1.0"encoding="GB2312"?>
<?xml:stylesheettype="text/xsl"href="report.xsl"?>
<document>
<report>
甲班
</class><q1>50</q1><q2>70</q2>
<q3>30</q3><q4>10</q4></report>
乙班
</class><q1>20</q1><q2>30</q2>
<q3>40</q3><q4>50</q4></report>
丙班
</class><q1>70</q1><q2>40</q2>
<q3>20</q3><q4>10</q4></report>
</document>
我们采用XSL模板结合今天所学的<xsl:if>,为其编写一个XSL文档,要求季度产量小于等于20的用红色表示,文件名为report.xsl,内容如下:
<?xmlversion="1.0"encoding="GB2312"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:templatematch="/">
<HTML><HEAD><TITLE>1999年生产统计</TITLE></HEAD>
<BODY><xsl:apply-templatesselect="document;"/></BODY>
</HTML>
</xsl:template>
<xsl:templatematch="document">
<H3>1999年生产统计</H3>
<TABLE border="1"cellspacing="0">
<TH>班组</TH><TH>
一季度
</TH><TH>
二季度
</TH>
<TH>
三季度
</TH><TH>
四季度
</TH>
<xsl:apply-templatesselect="report"/>
</TABLE>
</xsl:template>
<xsl:templatematch="report">
<TR>
<TD><xsl:value-ofselect="class"/></TD>
<TD><xsl:apply-templatesselect="q1"/></TD>
<TD><xsl:apply-templatesselect="q2"/></TD>
<TD><xsl:apply-templatesselect="q3"/></TD>
<TD><xsl:apply-templatesselect="q4"/></TD>
</TR>
</xsl:template>
<xsl:templatematch="q1|q2|q3|q4">
<!--此处测试产量,如小于等于20则添加一STYLE属性color,其值为red(红色)-->
<xsl:iftest=".[value()$le$20]">
<xsl:attributename="style">color:red</xsl:attribute>
</xsl:if>
<xsl:value-of/>
</xsl:template>
</xsl:stylesheet>
说明:
q1|q2|q3|q4──标记q1、q2、q3、q3均用此模板确定输出
$le$──是关系运算符中的“小于等于”,其它关系有小于($lt$)、大于($gt$)、大于等于($ge$)、等于($eq$)、不等于($ne$)等
.──表示引用当前标记
[]──表示筛选,只有满足筛选条件的标记才能被选取
value()──XSL函数,其他常用XSL函数有text()、end()、index()等。
XSL中的choose
上期我们学习了XSL元素<xsl:if>,已能通过测试XML数据的值来决定不同的输出形式(不知你尝试过没有,实际上<xsl:for-each>也可部分实现<xsl:if>的功能),但有时,我们希望对同一数据同时测试多个条件,根据不同条件输出相应结果。当然,我们可以用if,假如我们只有if可用的话。幸好我们有一个更好的选择,那就是用<xsl:choose>。下面介绍相关元素的语法:
<xsl:choose>
语法:<xsl:choose>
属性:无,表示一个多选测试的开始
<xsl:when>
语法:
<xsl:whenexpr="script-expression"language="language-name"test="pattern">
属性:
expr──脚本语言表达式,计算结果为“真”或“假”;如果结果为“真”,且通过test,则在输出中显示其中内容(可省略此项属性)。
test──源数据测试条件。
<xsl:otherwise>
语法:<xsl:otherwise>
属性:无,在一个多选测试中,如果没有不满足<xsl:when>规定的条件,如果在最后有此标记,则输出此标记中的内容。
示例:
此处以学生成绩单为例,要求按成绩的高低给出优秀(>85)、一般(70~85)、起格(60~69)、不及格(<60),而不是显示分数。其中成绩单的XML文档(文件名:grade.xml如下:)
<?xmlversion="1.0"encoding="GB2312"?>
<?xml:stylesheettype="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)内容如下:
<?xmlversion="1.0"encoding="GB2312"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:templatematch="/">
<HTML>
<HEAD><TITLE>成绩单</TITLE></HEAD>
<BODY><xsl:apply-templatesselect="document"/></BODY>
</HTML>
</xsl:template>
<xsl:templatematch="document">
<TABLEborder="1"cellspacing="0">
<TH>姓名</TH><TH>英语</TH><TH>数学</TH><TH>化学</TH>
<xsl:apply-templatesselect="grade"/>
</TABLE>
</xsl:template>
<xsl:templatematch="grade">
<TR>
<TD><xsl:apply-templatesselect="name"/></TD>
<TD><xsl:apply-templatesselect="english"/></TD>
<TD><xsl:apply-templatesselect="math"/></TD>
<TD><xsl:apply-templatesselect="chymest"/></TD>
</TR>
</xsl:template>
<xsl:templatematch="name"><xsl:value-of/></xsl:template>
<xsl:templatematch="english|math|chymest">
<xsl:choose>
<xsl:whentest=".[value()$gt$85]">优秀</xsl:when>
<xsl:whentest=".[value()$gt$70]">一般</xsl:when>
<xsl:whentest=".[value()$gt$60]">起格</xsl:when>
<xsl:otherwise>不起格</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
说明:
在<xsl:choose>选择中,从第一个<xsl:when>开始,逐个测试,直到满足一个测试条件就将其中的内容输出,不再测试后面的条件;如果不满足任何一个条件,则输出<xsl:otherwise>中的内容。
标记对<xsl:when></xsl:when>与<xsl:otherwise></xsl:otherwise>中可嵌套<xsl:if>或<xsl:choose>。
注:如果拷贝源代码,请将空格删除
运算符、关系与逻辑运算符,特殊字符等
今天我们学习XSL的各种运算符,满足编写更大灵活性的XSL样式的要求。
表一、运算符与特殊字符
运算符描述
/选择子元素,返回左侧元素的直接子元素;如果“/”位于最左侧表示选择根结点的直接子元素
//递归下降,不论深度,搜索指定的元素;如果位于最左侧表示从根结点出发递归下降搜索指定元素
.表示当前元素
*通配符,选择任意元素,不考虑名字
@取得属性值,作为属性名的前缀
@*通配符,选择任意属性,不考虑名字
:名字作用范围分隔符,将名字作用范围前缀与元素或属性名分隔开来
()*分组,明确指定优先顺序
[]应用过滤样式
[]*下标运算符,用于在集合中指示元素
表二、逻辑运算符
比较运算符可选方式描述
and$and$或逻辑与
or$or$或||逻辑或
not()$not$逻辑非
表三、关系运算符
=$eq$相等
=$ieq$相等(不区分大小写)
!=$ne$不等
$ine$不等(不区分大小写)
<$lt$小于
$ilt$小于(不区分大小写)
<=$le$小于等于
$ile$小于等于(不区分大小写)
>$gt$大于
$igt$大于(不区分大小写)
>=$ge$大于等于
$ige$大于等于(不区分大小写)
$all$集合运算符,如果集合中所有项目均满足条件则返回“真”
$any$集合运算符,如果集合中任意项目满足条件则返回“真”
|集合运算符,返回两个集合的联合
示例一:
从个人简历中寻找具有具有“WEB开发”技能的人的姓名与E-Mail。假设文档结构如下所示:
<document>
<resume>
<name>name</name>
<sex>sex</sex>
<birthday>birthday</birthday>
<skill>skill1</skill>
<skill>skill2</skill2>
…
<skill>skilln</skill>
</resume>
<resume>
…
</resume>
…
</document>
为从以上结构的个人简历中寻找出所有具有“WEB开发”技能的人的姓名与E-Mail的XSL文档结构如下:
<TABLEborder="1"cellspacing="0">
<TH>姓名</TH><TH>E-Mail</TH>
<xsl:for-eachselect="resume[$any$skill=’WEB开发’]">
<TR><TD><xsl:value-ofselect="name"/></TD>
<TD><xsl:value-ofselect="E-Mail"/></TD>
</TR>
</xsl:for-each>
</TABLE>
说明:
1.[]───表示选择条件,只有满足条件的个人简历才被显示;
2.$any$──由于每个人有多种技能,故加$any$作为前缀,以使每个人所有技能都能被比较;
3.skill=’WEB开发’──筛选条件
示例二、
仍上面的XML文档为例,如果欲选择1977/1/1之前出生的人的姓名、技能与E-Mail,相应的XSL文档结构如下(假定生日格式为yyyy/mm/dd):
<TABLEborder="1"cellspacing="0">
<TH>姓名</TH><TH>技能</TH><TH>E-Mail</TH>
<xsl:for-eachselect="resume[birthday$lt$’1977/1/1’]">
<TR>
<TD><xsl:value-ofselect="name"/></TD>
<TD><xsl:value-ofselect="skill[0]"/>
<xsl:for-eachselect="skill[index()>0]">、
<xsl:value-ofselect="."/>
</xsl:for-each>
</TD>
<TD><xsl:value-ofselect="E-Mail"/></TD>
</TR>
</xsl:for-each>
</TABLE>
说明:
1.birthday$lt$’1977/1/1’──搜索条件,在此处使用“<”会错误,故使用“$lt$”表示小于。
2.skill[0]───表示选择skill的第一项
3.skill[index()>0]───表示选择skill的第二项以后(包括第二项)的项目
4.xsl:value-ofselect="."───表示选择当前标记的值
相信大家应该注意到,在前面以及本次的例子中出现了一些函数,如index()、formatIndex()、childNumber(),也许大家还不完全明了其中的含义吧?敬请关注下一课。
注:如果拷贝源代码,请将空格删除
XSL函数一
XML与DHTML(动态HTML)一样,这些节点都是一个个对象,而且这些对象都是有层次的,从根节点开始构成一颗层次清淅的树状结构,这就形成了文档对象模型DOM,通过对象的属性、方法来达到访问控制XML节点的目的。
注:从本期开始,所有示例不再提供完整源代码,如有不明白之处,请仔细阅读前面七期、并动手练手。
一、end()
含义:返回集合中最后一个元素。
示例:输出最后一份简历
假定XML文件格式为:
……<resume>…</resume>……<resume>…</resume>……
相应XSL文件内容为:
<xsl:for-eachselect="resume[end()]">……</xsl:for-each>
或
<xsl:templatesmatch="resume[end()]">……</xsl:templates>
或
<xsl:apply-templateselect="resume[end()]">……</xsl:apply-template>
二、index()
含义:返回该元素在集合中的位置,返回值是一整数,其中第一个元素返回0
示例:返回前面三份简历
resume[index()$le$3]
注意:index()是与父元素相关的,请看下例:
<x>
<y/>
<y/>
</x>
<x>
<y/>
font-size: 9p
分享到:
相关推荐
### XSL 入门教程详解 #### 一、XML与XSL概述 随着互联网的快速发展,数据交换的需求日益增加,HTML作为一种标记语言逐渐暴露出其局限性,尤其是在内容与表现形式混合方面。为了克服这些限制,XML作为一种元标记...
一本非常好的XSL入门教程, 分成以下几大单元 1.第一个XML文档 2.XSL入门 3.XSL模板与匹配模式 4.测试模式 5.XSL中的choose 6.运算符,关系与逻辑运算符,特殊字符等 7.XSL函数之一 8.脚本与...
一、XSL入门 XSL由三个主要部分组成:XSL Transformations (XSLT)、XSL Formatting Objects (XFO) 和 XPath。XSLT是用于转换XML文档的主要部分,它定义了如何将源XML文档转换为新的XML、HTML或其他格式。XFO则用于...
在这里,我们将深入探讨XSL的基本概念,特别是对于初学者来说的入门知识。 首先,让我们来看看XSLT,它是XSL的核心,负责XML文档的转换。XSLT通过一系列模板匹配来定义如何将源XML文档转换为目标格式。这些模板包含...
一本非常好的XSL入门教程, 分成以下几大单元 1.第一个XML文档 2.XSL入门 3.XSL模板与匹配模式 4.测试模式 5.XSL中的choose 6.运算符,关系与逻辑运算符,特殊字符等 7.XSL函数之一 8.脚本与XSL的结合及应用 9...
一篇非常不错的xsl简易教程,希望对您有所帮助
XSL,全称为eXtensible Stylesheet Language,是一种用于转换XML文档格式的语言。它允许开发者将XML数据转换成HTML、PDF、XML或其他格式,以便于呈现或进一步处理。本教程大全是为初学者设计的,包含了一系列丰富的...
文件“xml及xsl入门”可能是针对这两项技术的基础教程。 5. **JavaScript**:JavaScript是构建动态Domino Web应用的关键语言,常用于增强用户界面和处理客户端逻辑。文件“新手指南”中可能包含了JavaScript在...
1. **Hello World 示例**:介绍一个简单的“Hello World”示例,帮助初学者快速入门。 2. **打印表单规范**:详细说明如何在XSL-FO中定义打印表单的结构和样式。 3. **样例2 fo.xsl 样式表**:提供了一个具体的样例...
◆介绍用于存储和操作数据的变量的概念, ◆讨论用于读写数据的文件和输入/输出, ◆总结常被忽视的python功能, ◆深入研究如何为模块和程序编写测试, ◆介绍如何使用python编写gui, ◆着重介绍xml、html、xsl和相关...
8. **模板继承与覆盖**: 模板可以通过`<xsl:import>`和`<xsl:include>`进行组合,通过`<xsl:override>`和`<xsl:exclude-result-prefixes>`实现继承和覆盖,以实现复用和定制。 9. **输出格式**: XSLT不仅可以处理...
XSL转载的学习资料,分享。可作为入门教材
XML文件中的样式通常通过XSL(Extensible Stylesheet Language)来定义,XSL有两部分:XSLT(XSL Transformations)用于转换XML文档,而XPath则用于在XML文档中查找信息。这里我们有两个XSL文件,hello2.xsl和hello....
3,即入门级信息。 执照 根据 Apache 许可,版本 2.0(“许可”)获得许可; 除非遵守许可,否则您不得使用此文件。 您可以在以下网址获取许可证副本 兼容性 CDA XSL 已经过测试,可以与 Saxon-PE 和主要浏览器一起...
着重介绍XML、HTML、XSL和相关技术;解释如何扩展Python;分享数值编程技术;介绍Jython的内部机理,Jython是一个用Java编写的Python版本。 Python入门经典目录 第一部分关于计算机的思考 第0章计算机科学研究 第...
作为一门面向对象的开源编程语言,python易于理解和扩展,并且使用起来...◆着重介绍xml、html、xsl和相关技术 ◆解释如何扩展python ◆分享数值编程技术 ◆介绍jython的内部机理,jython是一个用java编写的python版本
《XSLT从入门到精通》是一本深入探讨XSLT技术的专业书籍,它涵盖了XSLT的基础知识、进阶技巧以及实际应用案例。通过学习这本书的源代码,读者可以更好地理解和掌握XSLT在XML数据转换中的强大功能。XSLT是一种用于...
这篇教程将带你入门这三种技术的基础概念和应用。 DOM是一种基于树形结构的XML或HTML文档表示法,它将整个文档加载到内存中,形成一个可操作的对象模型。通过DOM,你可以方便地查找、修改或添加文档中的任何元素。...
Genkgo / Xsl PHP中的XSL 2.0 Transpiler。 安装 ... 它可以通过Composer作为安装和...入门 将XSLTProcessor替换为Genkgo\Xsl\XsltProcessor ,将version="1.0"更改为version="2.0" ,即可完成! <?php use Genkgo \