XSLT--可扩展样式表转换语言


XSLT:(extensible Stylesheet Language Transformation)透过XSLT可以将XML原本的树状结构转换为另外一种树状结构,也可以说,通过XSLT处理器可以将XML文件转换为其 他种类的文件,如HTML,或者文本文件。

XSLT以XML文件为作用对象,因此如果需要对XML文件作转换处理的话,需要添加如下语句:   <?xml-stylesheet type="text/xsl" href="F:/xmltest/saveit.xslt"?>

一个澄清:如果一个XML文件指定了其XSLT,那么所有的解释器都是从XSLT执行,此时XML只是相当于一个数据源,XSLT文件中所有XSL命名空间中的元素会被XSLT处理器进行转换。

XSLT命名空间:通过如下定义指明了该文件是一个XSLT文件,扩展名为.xslt。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

样板:(Template):<xsl:template match="message">   <xsl:value-of select="greeting"/>

套用样板规则:<xsl:apply-templates select=".//message">--select表明要处理目前及所有子元素为message的节点。

建立新的节点树:由XML-HTML,由于HTML有固定的属性集,所以只需要XML提供内容即可,但是如果由XML-〉XML,那么可能涉及到树结构的变化,即有可能需要创建新的元素,而其内容可能是原有元素的属性。下面介绍如何通过XSLT建立新的节点。

1)建立元素与属性节点:有些类似schema定义,

<xsl:template match="/">
4  <xsl:element name="simpleMessage">
5       <xsl:attribute name="count">
6            <xsl:value-of select="count(.//message)"/>
7       </xsl:attribute>
8  <xsl:apply-templates select=".//message"/>
9  </xsl:element>
10 </xsl:template>

2)建立文字节点:不难,一点提醒,因为XML会忽略空白,所以如果真有必要,必须通过<xsl:text>来将分割文字包起来。

3)建立处理程序节点--<xsl:processing-instruction name="xml-stylesheet">
href="SimpleMessage.xslt" type="text/xsl"
</xsl:processing-instruction>

4)建立备注(XML文件说明):<xsl:comment>This XML file was origin from
Messages.xml</xsl:comment>

5)使用复制<xsl:copy>--用于复制某个元素,同时可以往元素里添加内容。循环<xsl:for-each>--可以指定所需要处理的节点,直至最后一个

6)条件处理<xsl:if>--提供简单的  if--then 运算 <xsl:choose>--提供switch ..case结构

7)使用排序<xsl:sort>--可以指定主键(primary key)与次要键(secondary key)来进行排序。比如是数值,可以指定是升序(ascending)还是降序(descending)

8)变数与参数--在XSLT中声明,其值由Select决定,遇到关联此XSLT的XML文件后,XSLT处理器会计算该变数得到值,要取该值通过加一取值符即可:即$variable。

9)呼叫样板:通过<xsl:call-template>来调用命名样板(Named Template),一个命名样板可以指定所需要的参数,给与参数,即可以调用该模版。

19 <xsl:template name="StudentBlock">-----一个命名样板
20 <xsl:param name="art">0</xsl:param>
21 <xsl:param name="eng">0</xsl:param>
22 <xsl:param name="sci">0</xsl:param>
23 <xsl:param name="math">0</xsl:param>
24
Art:<xsl:value-of select="$art"/>,English:<xsl:value-of
select="$eng"/>,Science:<xsl:value-of
select="$sci"/>,Math:<xsl:value-of select="$math"/>
25 </xsl:template>

<xsl:call-template name="StudentBlock">---调用该命名模版
13
<xsl:with-param name="eng">
<xsl:value-of select="english"/>
</xsl:with-param>
14
<xsl:with-param name="sci">
<xsl:value-of select="english"/>
</xsl:with-param>
15
<xsl:with-param name="math">
<xsl:value-of select="english"/>
</xsl:with-param>
16 </xsl:call-template>

 

Schema 的使用法是在根元素中宣告Schema 檔案的位置

<Package Id="Business_Example" Name="Business Example" xmlns="http://www.wfmc.org/2002/XPDL1.0" xmlns:xpdl="http://www.wfmc.org/2002/XPDL1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wfmc.org/2002/XPDL1.0 http://wfmc.org/standards/docs/TC-1025_schema_10_xpdl.xsd">

DTD 的宣告必須擺放在XML 文件的前言(prolog)之中,並由“<!DOCTYPE”開始到 “>” 結束,使用 SYSTEM 關鍵字,則表示所參照的 DTD 檔案是屬於非公開的一般參照,使用PUBLIC 關鍵字,則表示這一份參照到的DTD 是被廣泛使用

<!DOCTYPE Movies SYSTEM "F:/xmltest/saveit.dtd">

XML Schema 與DTD 都是用來定義 XML 文件結構,但是DTD 並不足以符合今日的需求,而且DTD 的宣告使用的不是XML 文法,這使得程式無法以處理XML 文件的方式處理DTD 文件,這些優點使XML Schema 可以完全取代DTD,更嚴謹的描述XML文件結構

-----------------------------从SCHEMA讲起---------------------------------------------------------------

1:xml的schema文件都是以.xsd为扩展名。

2:schema of schemas:即 http://www.w3.org/2001/XMLSchema ,所有的基本类型都是由该schema定义,比如int,string ,element,attribute等等。

3:xml schema的注解: 

 <xs:annotation><xs:document>some words</xs:document></xs:annotation>

4: xml schema 表示元素内容资料的形态可以分为两种:a)单纯形态simple type) b)复杂形态complex type),他们的区别在于,单纯形态不允许有子元素和属性,复杂形态可以拥有。

5:一个单纯形态:

<xs:simpletype name="Agetype">

     <xs:restriction base="xs:string">-----string 是schema的内建基本型

          <xs:pattern value="[1-9][0-9][0-9]"/>----一个正规表达式

     </xs:restriction>

<xs:simpletype>

单纯形态很多:比如清单形态(List Type)---只能基于简单类型,表明该元素的value是很多某个形态值的一个列表,所以该值的类型只能是简单类型。              集合类型(Union Type)---表明该元素的值是某几种类型的值的集合,它在定义的时候指定了它的menberTypes等等.例:<xs:union membertypes="StudentId  xs:string">,指明了该聚合是由两种类型(StudentId 和 string 的值共同组成的)

6:复杂形态:定义:<xs:complexType>其内部可以是元素宣告<xs:element>,参照(ref)或属性宣告(xs:attribute)。

7: 空白内容 例:<SchoolFee curreycy="NT" fee="59822">该元素没有内容,只有属性。

8:混合内容:<xs:compleType mixed="true">----我的理解是可以在元素前面出现String。

9:次序内容模型:<xs:sequence> 选择内容模型<xs:choice>--在xmlspy中很明显标示为一个开关,也即说明它只能在一个序列值中选择一个。

10:任意类型:<xs:all>在任意型中,元素中的内容可以不分顺序出现,但出现的次数或者为0,或者为1。元素出现限制属性minOccurs,maxOccurs,fixed---指定元素出现的内容必须符合给定的值,default;属性出现限制属性:use属性:required ,optional,prohibited.

11:元素群组:<xs:group>----将多个元素集合为一个组,那么其他元素可以直接引用该组。

12: 任意元素<xs:any>与任意属性<xs:anyAttribute>: any 元素的namespace属性(##any,##local--不属于任何命名空间,##other)与processContent(要求处理器对内容 做检验)属性(skip--不作任何检验,lax--如果可以找到目标命名空间的schema,则进行校验,否则不予校验,且不报错,strict--一 定要根据目标命名空间的schema检验内容)

13:<xs:unique><xs:key>的不同之初在于后者确保元素必为不同值。

14:使用Nil值,可以较为明确得告诉使用者,该元素的值尚未指定:例:<xs:element name="StudentId" type="xs:string" nillable="true"/>

15: 在xml中,居然还可以定义抽象类型,也即该元素不应该有实例,需要在扩展,继承该类得基础上创建对象。

16:命名空间与目标命名空间,schema与schema for schemas,所有的schema文件是以<xsd:schema开头,那我们就知道改schema文件所使用到得基本类型是在xmlns:xds=http://www.w3.org/2001/XMLSchema  中定义的,所以在验证目标xml文件得有效性得时候,先会以schema for schemas来验证该.xsd文件得有效性,之后在根据该xsd来验证文档的有效性。如果在一个schema文件中指定了目标命名空间,那么在该 schema文件中定义得新的元素,属性等属于该命名空间。

17:元素与属性的检定:可以指定elementformdefault="true" 与attributeformdefault="false"来确定是否要在xsd文档中需要在元素与属性得定义前面加上命名空间。如上,元素需加上目标命名空间,属性无须加。

18:schema文件不一定在一个文档中定义,可以拆分

------------XLST(extensible Stylesheet Language Transformation--可扩充样式转化语言)--------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值