Zvon XSLT Tutorial
- 某处xml片段该采用哪个template取决其所在位置(XPATH), 其xpath匹配哪个template就采用哪个template
- xslt对匹配原始内容的处理有有两种方式:xsl:value-of 和xls:apply-templates ,两者的区别是前者不再对匹配的内容进行处理,后都则对匹配的内容再进行xslt处理
- xslt处理总是从匹配根节点(xpath="/")的模板开始的,此模板不一定需要强制指定,没有定义此模板则采用默认方式处理:处理所有节点包括text nodes,采用xsl:apply-templates方式;如果指定了根节点的处理模块,默认处理规则就不会再应用,如果此还你还想用其默认规则,则必须在xsl模板中强制指明( xsl:apply-templates)
- 使用 mode一个元素可以被多次被匹配的相应模板进行处理.如果 xsl:apply-templates指定的mode不存在,则相当于不存指定的模块不执行此处理example
- 当多个模板匹配一个元素时需要有模板priority属性来决定执行哪个模板( 权值大的执行).如果模板未指定priority,它的值是根据一些规则计算出来的.CCC的权值小于CCC/CCC和AAA/CCC/CCC,但后两都权值相同,此时XSLT处理可能会报错,如果不报错,则执行出现在xsl文件最后的那个模板. xpath="*"小于任何指定的xpath. 计算的权值范围在(-0.5到0.5). exmaple
- 元素的属性值可通过在属性名前加"@"来获取
- 属性的处理方式和元素相同,定义模板时可匹配一指定属性
- Axes child axis:子节点(不包括子节点的子节点)
descendant axis:: 子孙节点(当前节点内的所有节点)
parent axis:: 父节点(不包括父节点的父节点)
ancestor axis:: 祖先节点(父节点及其以上面的所有父节点的父节点)
following-sibling:: 当前节点后面的所有同级节点
preceding-sibling:: 当前节点前面的所有同级节点
following:: 当前节点后面的所有节点,注意还包括祖先节点的following节点
preceding:: 当前节点前面的所有节点,包括preceding-sibling节点及其下面的所有节点,但不包括祖先节点
attribute:: 当前节点的所有属性节点
namespace axis ?
self:: 当前节点
descendant-or-self::当前节点的子-孙节点及当前节点
ancestor-or-self::当前节点的祖先节点及当前节点 - Axis child:: 可以省略,这是默认的axis.
Axis attribute::可缩写成@
/descendant-or-self::可略写成@ // 包括根节点及其下面的所有的所有节点
self:: 可以缩写 .
parent:: 可经缩写成 .. - xsl:for-each 功能类似于一个模板,通过select属性选中的的第一个节点应用此模板
- xsl:call-template 可按名称调用模板,与不当前是否匹配不无关
- xsl:for-each与xsl:apply-templatess可能进行排序通过内勤嵌xsl:sort元素来根据(select)什么元素进行哪种顺序的排序(order:ascending descending ),还是指定排序的数据类型data-type(text,number),还可以指定大小写的顺序(case-order ; upper-first,lower-first)
- xsl:element 可根据其name属性动态生成元素
- xsl:attribute可根据其name属性动态生成元素属性
- xsl:copy-of与 xsl:copy进行元素拷贝,两者的区别是copy只拷贝当前节点内的文本内容text(包括子节点内的text),不包括子节点及属性,copy-of则进行完全拷贝
- xsl:copy使用use-attribute-sets时拷贝当前元素(不包括属性和子节点)加入指定的属性集,
Read more at www.zvon.org/xxl/XSLTut...