`
semi_sleep
  • 浏览: 101151 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

读XML in a Nutshell (5)

    博客分类:
  • XML
阅读更多

本篇的内容包括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

    XML.in.a.Nutshell(英文版)

    C# 5.0 in a Nutshell 5th

    《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 in a Nutshell, 5th Edition》是一本全面介绍C# 5.0编程语言的经典著作。这本书由权威专家编写,深入浅出地讲解了C# 5.0的关键特性,旨在帮助开发者快速掌握并熟练应用这一强大的编程工具。 C# 5.0是微软...

    C# 5.0 in a Nutshell

    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 ...

    C# 7.0 in A Nutshell

    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 in a Nutshell #### 引言:理解USB标准 对于初学者而言,进入USB领域可能会感到非常棘手。USB 2.0规范长达650页,仅仅这一点就足以让人望而却步。而这仅仅是众多与USB相关的标准中的一个开始。除了主规格...

    python in a nutshell 2nd,中文版

    《Python in a Nutshell》第二版是一本针对Python编程语言的深度指南,旨在为程序员提供一个全面而紧凑的参考资源。这本书中文版的高清扫描版是学习和查阅Python技术的重要资料,尤其适合已经有一定编程基础并希望...

    Delphi in a Nutshell

    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 in a Nutshell #### 知识点一:R 的获取与安装 - **R 版本**:本书提及了 R 的版本信息,对于学习者来说了解当前使用的 R 版本至关重要,因为不同的版本可能会有功能上的差异或兼容性问题。 - **获取与安装 ...

    C#6.0 IN A NUTSHELL

    《C#6.0 IN A NUTSHELL》是由Joseph Albahari和Ben Albahari合著的一本关于C#编程语言的参考书籍。这本书是“C# in a nutshell”系列书籍的最新版,专门针对C# 6.0版本提供了详尽的参考资料和指导。该书不仅仅是一本...

    Python in a Nutshell Third Edition 2017

    ### Python in a Nutshell 第三版 2017 关键知识点解析 #### 书籍概述 《Python in a Nutshell》第三版是一本全面而深入介绍Python编程语言的经典著作,由Alex Martelli、Anna Ravenscroft和Steve Holden共同撰写。...

    Java in a Nutshell(中文版)

    Java in a Nutshell(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    C# 6.0 in a Nutshell(6th) 无水印pdf

    C# 6.0 in a Nutshell(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...

Global site tag (gtag.js) - Google Analytics