本篇的内容包括Chapter 8 XSL Tansformations。
XSLT的思想就是采用逐层的方式遍历所有的Node(相当于一个n层的for语句嵌套),在这个遍历的过程中,使用xsl的template来控制输出内容。有些时候,单纯的一次遍历是不够的,xsl提供了一个mode机制,通过声明若干个mode来实现多次遍历(同个mode下面重复的template好像只有一个能被执行,至于如何选择,还看不懂)。这一章只是介绍了XSLT的一些基本内容,如果真正要用,还要去看专门介绍XSLT的书。
以下是要点:
1.XSL文件的document node可以使用styolesheet或者transform tag,两个都一样,如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>
如果像上面一样没有任何template,则将输出所有的element的content,而attribute,comment等等是不会输出的,这个种行为是由默认的template决定。
2.在xml文档种如果要指明采用某个xsl做transform,则可以在document element之前加入以下的指令:
<?xml-stylesheet type="application/xml" href="xxx"?>
3.Template的使用格式如下,注意match里面的xpath只能用abbreviate form,而且经测试是不能使用“..”来指向父节点的。
<xsl:template match="person">A Person</xsl:template>
4.Template里面可以包含文字,即literal data characters,或者literal result element,即一般的tag,当然要使xsl满足well form这个条件。
5.要输出某个值,可以使用value-of,如果该值是出现在literal result element的attribute中,可以使用“{xxx}”格式,例子如下:
<xsl:value-of select="last_name"/>
<name first="{first_name}" initial="{middle_initial}" last="{last_name}" />
6.在template里面可以使用apply-templates这个tag来控制遍历的方向,需要注意的是,如果在一个template里面没有apply-templates这个tag,那么遍历会到此结束。与template的match不同,经试验,apply-templates的select是允许使用“..”的。如果select被忽略的话,那么默认是所有的子节点,格式如下:
<xsl:apply-templates select="name"/>
<xsl:apply-templates/>
7.默认的规则可以用templat表示如下,需要注意的是attribute,comment,processing-instructure虽然有template,但是由于他们不被认为是element的child node,所以在默认情况下不会被输出。对于namespace,由于xpath里面没有相应的函数,所以其默认规则无法用template来表示。
<xsl:template match="text( )|@*"><xsl:value-of select="."/></xsl:template>
<xsl:template match="*|/"><xsl:apply-templates/></xsl:template>
<xsl:template match="processing-instruction()|comment( )"/>
8.Mode的使用格式如下,需要注意的是,对于每个不同的mode,XSLT处理器都会使用默认的规则,除非在该mode下明确指定template,同时,经过测试,所有被命名的mode都必须被default的那个mode调用apply-templates后才能被使用。
<xsl:template match="person" mode="toc"><xsl:apply-templates select="name" mode="toc"/></xsl:template>
9.关于namespace,如果在xpath里面需要用到namespace,那么只要在之前随便哪个地方用xmlns:xxx声明就好。
分享到:
相关推荐
XML.in.a.Nutshell(英文版)
《C# 5.0 in a Nutshell 5th》是C#编程语言的一本权威指南,由专家撰写,深入浅出地介绍了C# 5.0版本的关键特性和使用方法。这本书对于开发者来说,是一份宝贵的参考资料,帮助他们理解和掌握C# 5.0的精髓,提升开发...
《C# 5.0 in a Nutshell, 5th Edition》是一本全面介绍C# 5.0编程语言的经典著作。这本书由权威专家编写,深入浅出地讲解了C# 5.0的关键特性,旨在帮助开发者快速掌握并熟练应用这一强大的编程工具。 C# 5.0是微软...
When you have a question about how to use C# 5.0 or the .NET CLR, this highly acclaimed bestseller has precisely the answers you need. Uniquely organized around concepts and use cases, this fifth ...
Dive in and discover why this Nutshell guide is considered the definitive reference on C#. Get up to speed on the C# language, from the basics of syntax and variables to advanced topics such as ...
### USB in a Nutshell #### 引言:理解USB标准 对于初学者而言,进入USB领域可能会感到非常棘手。USB 2.0规范长达650页,仅仅这一点就足以让人望而却步。而这仅仅是众多与USB相关的标准中的一个开始。除了主规格...
《Python in a Nutshell》第二版是一本针对Python编程语言的深度指南,旨在为程序员提供一个全面而紧凑的参考资源。这本书中文版的高清扫描版是学习和查阅Python技术的重要资料,尤其适合已经有一定编程基础并希望...
Not to rest on success, the latest version of Delphi, Version 5, includes further expansion and refinement of the 3-tier application framework introduced in Delphi 4 and has resulted in a prize-...
### R in a Nutshell #### 知识点一:R 的获取与安装 - **R 版本**:本书提及了 R 的版本信息,对于学习者来说了解当前使用的 R 版本至关重要,因为不同的版本可能会有功能上的差异或兼容性问题。 - **获取与安装 ...
《C#6.0 IN A NUTSHELL》是由Joseph Albahari和Ben Albahari合著的一本关于C#编程语言的参考书籍。这本书是“C# in a nutshell”系列书籍的最新版,专门针对C# 6.0版本提供了详尽的参考资料和指导。该书不仅仅是一本...
### Python in a Nutshell 第三版 2017 关键知识点解析 #### 书籍概述 《Python in a Nutshell》第三版是一本全面而深入介绍Python编程语言的经典著作,由Alex Martelli、Anna Ravenscroft和Steve Holden共同撰写。...
Java in a Nutshell(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除
C# 6.0 in a Nutshell(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...