xsl输出

Xsl的输入内容:

       1. 属性值模板

如果要在输出文档的元素中包含属性,并且属性值是从输入文档中得到的,那么就要用{name}来代替”<xsl:value-of select =”name” />这样的形式,因为后者会选成<和<嵌套,使xsl文档不是形式规范的xml文档。

{}可以连续使用。

       2. xsl:element

              可以在输出文档中插入一个元素,元素的名称则xsl:element的name属性指定。

              元素的内容由xsl:element开始和结束标记之间的内容决定。

3. xsl:attribute

可以在输出文档中的元素里插入一个属性,属性名字由xsl:attribute元素的name属性指定,元素的内容,可以由xsl:attribute元素的开始和结束标志之间的内容决定,可以是字符串,或是xsl指令的结果。

可以在xsl文档中定义一个或多个xsl:attribute-set,它用来标识一个属性集合,用来在多个元素上复用。调用形式为:<td xsl:use-attribute-sets=”attset1 attset2”>

       4. xsl:processing-instruction

可以输出文档中插入一个处理指令,处理指令的名称由xsl:processing-instruction元素的name值指定。处理指令的内容是xsl:processing-instruction元素的内容。

       5. xsl:comment

              可以在输出文档中插入一个注释。

6. xsl:text

可以把输出文档中的文本用xsl:text来包围起来,这样一可以包含多个空格,二可以在输出不规范的文档时,原样输出之间的文本

7.       xsl:copy

可以把输出文档中源代码复制到输出文档中,默认不包括属性、子元素及其它内容。

另外xsl:copy可以做自我复制。如:

<xsl:template match=”* | @* | processing-instruction() | comment() | text() ”>

<xsl:copy>

<xsl:apply-template select=” * | @* | processing-instruction() | comment() | text()” />

</xsl:copy>

</xsl:template>

8. xsl:number
可以输出格式化的数字。由value来提供数字值。如果没有提供默认的value属性值,则计算上下文节点的的兄弟节点的数量。注意,和position()函数提供的数值不同,position()提供的是符合测试条件的上下文节点的中的某个节点相对其它节点的位置。
Xsl:number的几个参数:level、count、from
Level 的取值可以为any、single、mulpitle
Any :计算文档中属于同类的所有节点的个数。不管是否处在同一个父节点之下。
  Single:计算文档同一个父节点下中属于同类的所有节点的个数。
  Mulpitle:没看懂。
Count的取值可以是一个表达式:计算对哪些元素计数。
From 的取值可以是一个xpath表达式,表示从哪个元素进行计数。只有在level="any"时才有作用。
  数字到字符串的转换:可以通过xsl:number的四个参数来完成:
   format letter-value grouping-separator grouping-size
1. format 通常可取值为:I 、i 、a 、A 、加前导0.
2. letter-value如果format属性值为I时,取值为traditional时表示字符按数字解释,如:罗马字符。取值为alphabetic时表示按字母解释,如:I J K LM…..。
3. grouping-separator 数字之间的分隔符
4. grouping-size 数字按多少位分组。
<xsl:number grouping-separator="," grouping-size="3" value="100000">
显示为:10,000

9. xsl:sort
可以在xsl:apply-templates 或者在 xsl:for-each元素里使用xsl:sort元素来对结果进行排序,xsl:sort元素可以有几个属性来定义行为:
1. select  确定是按哪个子节点排序。
2. date-type  确定是按字母还是数字排序。
3. order  可以把这个值设成descending来调整升序为降序。
4. case-order   属性值可以是upper-first 或 lower-first来确定大小写的顺序。

10. mode属性
对于需要在输出文档中多次包含输入文档中的相同内容,只需在xsl文档中多处应用相同的模板即可。但如果多处输出相同内容时,格式不同,就需要使用mode属性来标识同一元素的不同的模板,然后在应用模板时也加入mode属性来调用。如:
<xsl:apply-templates select="element" mode="a">
<xsl:template match="element" mode="a">

11. xsl:variable
可以用它来定义变量,它用name属性定义变量的名称,变量的值,就是在这个元素中间的内容。
<xsl:variable name="a">this is a variable.</xsl:variable>
定义变量可以是xsl文档的顶级元素,这样它就是全局变量,也可以定义在模板中,这样它只能在相应的模板中使用或兄弟节点或后继节点使用。局部变量可以覆盖全局变量,两个同名的局部变量也可以覆盖较前一那个。
调用变量可以在变量名字前加$,比如:<xsl:value-of select="$a"></xsl:value-of>
变量不能递归调用,也不能在把两个变量互相循环引用。

12. 变量模板
每个模板都可以通过name属性来标识成一个变量模板,而不是通过match属性来匹配具体的元素。然后可以通过<xsl:call-template name="">来引用变量模板,这样,如果在模板中大量存在相同内容的时候,就可以减少工作量。
可以在变量模板中使用参数来传递内容,具体语法为:
<xsl:template name="element">
<xsl:param name="a">bbbbb</xsl:param>
…………………..
</xsl:template>
其中:a为参数名,bbbbb为参数的默认值。
然后在调用模板时传递参数:
<xsl:apply-template select="element">
 <xsl:with-param name="a">ccccc</xsl:with-param>
…………………………….
</xsl:apply-template>
其中:a为变量名,ccccc是实际传递的参数值。如果没有ccccc,则使用bbbbb做为默认值。也可以用另外的形式传递参数值:在xsl:with-param中使用select属性。

13. 删除和保留空格
删除节点字符串前后的空格:使用normalize-space()函数
删除只包含空格的文本节点:
 使用xsl:strip-space元素,只要在它的element属性中列出需要删除空格节点的节点名称,就可以删除这些节点中包含的空格元素。也可以使用通配符。
 使用xsl:preserve-space元素,可以恢复它的element属性中列出的节点中包含的空格节点。主要作用是用来覆盖其它xsl文档里的xsl:strip-space。
在文本中包含重要空格的方法是,用xsl:text元素来包含它,这样就永远不会被删除。

14. 条件输出
xsl:if  使用它的test属性值的xpath表达式来匹配输入节点,如果表达式为true,则输出xsl:if包围的值。
Xsl:choose 这个元素可以提供匹配多种条件的情况,具体每一种条件,都是由xsl:choose元素的子元素xsl:when 的 test属性来匹配,如果所有的xsl:when的条件都为false,则执行xsl:otherwise 。

15. 合并样式表
xsl:import 可以使用它来导入另外的样式表。
Xsl:import必须出现在样式表的所有顶级元素之前。导入的样式表可能与原样式表有规则冲突,那就以原样式表为准;如果导入的多个样式表之间有规则冲突,则以后导入的样式表中的规则为准。
Xsl:apply-inport 它与xsl:apply-template语法都相同,区别就是当原文档中的规则与导入的规则有冲突时,明确指出,应用导入的规则,不允许默认的覆盖。
Xsl:include 它是顶级元素,可以出现在最后一个xsl:import元素之后的任意顶级位置。它href指向的xsl文档中的规则,与原文档中的规则的优先级相同,如果有冲突,只与它们所在的相对位置有关。所以xsl:include所处的位置决定了应用冲突的规则中的哪一个。

16. 直接在xml文档中包含xsl样式表
具体的用法是,把xsl:stylesheet包含的样式表规则,放在根元素之下,并且xsl:stylesheet具有一个ID属性,用来唯一标识这个样式表。然后在xml文件的处理指令<?xml-stylesheet 中使用href属性来引用这个样式表,具体形式:
<?xml-stylesheet type="text/xml" href="#id(idname)">


17. 

xsl的三种输出方式:
 xml  html  text
如果未明确用xsl:output指出了输出方式,则默认是xml。如果输出文档的根节点是html这个四字母的任意大小写形式,则按html来输出,不是xhtml,而是传统不规范的html,这样可被大多数浏览器正确的解释。
Xsl:output 有4 个属性来格式化输出xml文档声明:
Omit-xml_declaration   如果为yes,则不在输出文档中包含xml声明,为no则包含
 Version     忽略此属性,则默认输出version="1.0"
 Standalone    输出 xml声明中的standalone属性
 Encoding     在xml声明中写入编码格式
Xsl:output 没有直接在输出的xml中加入内部dtd声明的语法,但可以在文档中包含外部DTD的声明。语法为:在xsl:output中加入属性:doctype-system 和 doctype-public。
  Xsl:output 的参数,indent="yes",让xsl转换器缩进输出的xml文档。
  Cdata-section-elements 参数,指定输出CDATA文本段。

转载于:https://www.cnblogs.com/guoxu/articles/1689399.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值