使用XSL转换XML文档
XML实用技术教程 第17讲(XSLT转换)

2006。 2006。3
计算机与电子系— 计算机与电子系—计算机技术教研室
XSLT转换机理 XSLT转换机理
XSLT将模式与模板相结合来实现转换 XSLT将模式与模板相结合来实现转换
样式表转换
XML FO
样式单树 (模板 模板) 模板 源文档 源树 指令执行
XML
XSL引擎 引擎
FO
结果树
XML
Non XML
2006。 2006。3
计算机与电子系— 计算机与电子系—计算机技术教研室
什么是模式
模式就是所规定节点处理的条件集合 满足条件的节点匹配该模式,不满足则不匹配 最普通的模式规定匹配元素类型的名称。
模式 doc * chapter|section section/title text() Node() 含义 配任何的doc元素 配任何的doc元素 匹配任何元素 匹配任何的chapter元素和section元素 匹配任何的chapter元素和section元素 匹配上一代元素为section的title元素 匹配上一代元素为section的title元素 匹配任何文本节点 匹配任何非属性节点和非根节点
2006。 2006。3 计算机与电子系— 计算机与电子系—计算机技术教研室
para、note元素所匹配的模板 para、note元素所匹配的模板
<xsl:template match="para"> <p><xsl:apply<p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="note"> <p class="note"><b>NOTE:</b><xsl:applyclass="note"><b>NOTE:</b><xsl:applytemplates/></p> </xsl:template> <xsl:template match="emph"> <em><xsl:apply<em><xsl:apply-templates/></em> </xsl:template> </xsl:stylesheet>
XSLT教程

XSLT教程XML文档树ancestor::The ancestors of the context node.The ancestors of the context node consist of the parent of the contextnode and the parent's parent and so on; thus the ancestor::axis alwaysincludes the root node unless the context node is the root node. ancestor-or-self::The context node and its ancestors.The ancestor-or-self:: axis always includes the root node. attribute::The attributes of the context node.This axis will be empty unless the context node is an element.child::The children of the context node.A child is any node immediately below the context node in the tree.However, neither attribute or namespace nodes are considered childrenof the context node.descendant::The descendants of the context node.A descendant is a child or a child of a child and so on; thus thedescendant:: axis never contains attribute or namespace nodes.descendant-or-self::The context node and its descendants.following::All nodes that are after the context node in the tree,excluding any descendants, attribute nodes, andnamespace nodes.following-sibling::All the following siblings of the context node.The following-sibling:: axis identifies just those children of aparent node who appear in the tree after the context node. This axisexcludes all other children that appear before the context node.If the context node is an attribute node or namespace node, thefollowing-sibling:: axis is empty.namespace::The namespace nodes of the context node.There is a namespace node for every namespace which is in scope forthe context node.This axis will be empty unless the context node is an element. parent::The parent of the context node, if there is one.The parent is the node immediately above the context node in the tree. preceding::All nodes that are before the context node in the tree,excluding any ancestors, attribute nodes, andnamespace nodes.One way to think of the preceding axis is all nodes whose contentoccurs in their entirety before the start of the context node. preceding-sibling::All the preceding siblings of the context node.The preceding-sibling:: axis identifies just those children of aparent node who appear in the tree before the context node. This axisexcludes all other children that appear after the context node.If the context node is an attribute node or namespace node, thepreceding-sibling:: axis is empty.self::Just the context node itself.几种简写方式count()、local-name()、name()、position()、last()String函数concat()、contains()、starts-with()、string()、string-length()、substring ()、substring-after()、substring-before()、translate()<xsl:variable name="UpCaseHttp" select="translate($ItemValue, 'htp', 'HTP')"/> Boolean函数boolean()、false()、not()、true()Number函数ceiling()、floor()、number()、round()、sum()XSLT标签xsl:template xsl:call-templatexsl:apply-templates xsl:paramxsl:with-param<xsl:template name="JSButton"><xsl:param name="Name"/><xsl:param name="JS"/><img src="../images/empty.gif" width="5" height="1"/><span class="clsButtonFace"><a onclick="javascript:{$JS};"><xsl:value-of select="$Name"/></a></span></xsl:template><xsl:template name="ea:SaveNoNewButton"><xsl:call-template name="JSButton"><xsl:with-param name="Name" select="' 保存'"/><xsl:with-param name="JS" select="'verify("Save")'"/> </xsl:call-template></xsl:template><xsl:apply-templates select="Ebanswers/PAGE"><xsl:template match="PAGE"></xsl:template>xsl:foreach<xsl:for-each select="$CodeTable"><option value="{CODE_VALUE}"><xsl:if test="CODE_VALUE = $AValue"><xsl:attribute name="selected"/></xsl:if><xsl:value-of select="CODE_NAME"/></option></xsl:for-each>xsl:sort<xsl:sortselect = string-Expressionlang = { nmtoken }data-type = { "text" | "number" | QName }order = { "ascending" | "descending" }case-order = { "upper-first" | "lower-first" }/>紧随xsl:apply-templates或xsl:for-each<xsl:apply-templates select="/Toolkit/tk:Table/tk:Field[tk:List]"> <xsl:sort select="tk:List/@Order" data-type="number"/> </xsl:apply-templates>xsl:variable注意字符串变量<xsl:variable name="Test" select="'title'"/>xsl:value-of xsl:text<xsl:value-ofselect = Expressiondisable-output-escaping = "yes" | "no"</xsl:value-of><xsl:textdisable-output-escaping = "yes" | "no"></xsl:text><xsl:template name="ea:WhiteSpace"><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text></xsl:template>xsl:element xsl:attributexsl:attribute-setXML File (item.xml)<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="element.xsl" ?><root><item>My Item</item></root>XSLT File (element.xsl)<?xml version="1.0"?><xsl:stylesheet version="1.0"xmlns:xsl="/1999/XSL/Transform" ><xsl:template match="item"><xsl:element name="xsl:template"><xsl:attribute name="match">cost</xsl:attribute><xsl:attribute name="xml:space">preserve</xsl:attribute> <xsl:apply-templates/></xsl:element></xsl:template></xsl:stylesheet>OutputThis is the formatted output:My ItemThe following is the processor output, with line breaks added for clarity. <?xml version="1.0"?><xsl:template match="cost"xml:space="preserve"xmlns:xsl="/1999/XSL/Transform">My Item</xsl:template><xsl:attribute-set name="ea:WrapAttrs"><xsl:attribute name="nowrap"/></xsl:attribute-set><!--不能为空的字段的显示名称的td的attribute-set--><xsl:attribute-set name="ea:NonEmptyAttrs" use-attribute-sets="ea:WrapAttrs"><xsl:attribute name="align">right</xsl:attribute><xsl:attribute name="bgcolor">#E2EBF6</xsl:attribute></xsl:attribute-set>xsl:if xsl:choose xsl:when xsl:otherwise<a href="{$HttpRef}"><xsl:if test="$Target != ''"><xsl:attribute name="target"><xsl:value-of select="$Target"/></xsl:attribute> </xsl:if><xsl:value-of select="$ItemValue"/></a><xsl:choose><xsl:when test="$BigHrefType='HREF'"><a href="{$HrefAddress}"><xsl:value-of select="$Value"/></a></xsl:when><xsl:when test="$BigHrefType='EMAIL'"><a href="mailto:{$Value}"><xsl:value-of select="$Value"/></a></xsl:when><xsl:otherwise><xsl:call-template name="ea:ProcessText"><xsl:with-param name="Text" select="$Value"/></xsl:call-template></xsl:otherwise></xsl:choose>xsl:import xsl:include<xsl:import href="PublicUtil.xslt"/>xsl:copy-of xsl:output<xsl:output method="html" indent="no"/><xsl:variable name="ea:NoRecord"><tr><td colspan="20" class="pad5">没有内容</td></tr></xsl:variable><xsl:copy-of select="$ea:NoRecord"/>XSLT函数current()通常情况下,和“.”返回的值相同。
25转换XML文件

25转换XML文件
要用XSL文件来转换XML文档,您需要按以下步骤执行:
1.确保XML文件是当前文档。
2.
选择菜单项XSL/XQuery | XSL Transformation (F10) 或点击图标。
这时,XML 文档中所引用的XSL样式表将被用于进行转换。
(由于Company.xsl文件是一个
XSLT 1.0文档,因此XMLSpy将自动使用内置的Altova X SLT 1.0引擎进行转换。
)
输出文档将在Browser视图中显示,它具有文件名XSL Output.html。
Browser视
图中,上面是居左对齐显示的Company数据,下面是以表格形式显示的Person数据。
注:如果您看到的表格只有表格标题、而没有数据的话,请确保您已经为schema定义了目标命名空间(target namespace)(详见定义命名空间)。
Schema、XML和XSL 中所使用的命名空间必须相同。
使用XSL格式化XML

第六章 xsl格式化xml
26
在路径中使用” ” 在路径中使用”*”
如果只知道”学生列表”的孙子节点”姓名”, 而不知道儿子节点,则可用如下来描述: <xsl:template match=“/”> <xsl:apply-templates select=“学生列表/*/姓 名”/> </xsl:template>
练习
将下列xml文档使用xsl格式化。要求以列表的 形式显示其内容,其中标题的字体为黑体,字 号为10号,红色背景,居中,内容记录以宋体 显示,并左对齐。
第六章 xsl格式化xml
13
节点的访问
访问单个节点 访问多个节点
第六章 xsl格式化xml
14
访问单个节点
<xsl:value-of>指令用于将节点的内容复制到输 出结果中,指令的select属性用于选择被提取 值的节点。即具体元素的内容提取出来。 即具体元素的内容提取出来。 即具体元素的内容提取出来 它与xsl:apply-templates组合在一起完成搜 它与 组合在一起完成搜 索知道节点中指定子节点的子节点的值。 索知道节点中指定子节点的子节点的值。 模板不允许嵌套,如果搜索更深层次的子节点, 模板不允许嵌套,如果搜索更深层次的子节点, 需要多个模板进行组合。 即模板中不包含其 需要多个模板进行组合。(即模板中不包含其 他模板,每个模板都是独立的)。 他模板,每个模板都是独立的 。
“/”是根节点匹配符号,可以单独使用。 在样式单中,匹配根节点的模板必不可少。 模板样式出现的顺序是没有关系。
第六章 xsl格式化xml
20
根元素匹配符合
“/*”用于匹配任意的根元素。 例如:如果学生列表为根元素,则 <xsl:template match=“学生列表”> <xsl:apply-templates/> </xsl:template> 可以改为: <xsl:template match=“/*”> <xsl:apply-templates/> </xsl:template>
第四章 格式转换

示例 — HTML 代码
<tr> <td width="50%">Multimedia operating system</td> <td width="50%">John</td> </tr> <tr> <td width="50%">Library system automation</td> <td width="50%">Joseph</td> </tr> </table> <p class="times">Copyrights IBM</p> </body> </html>
– 用来转换一个 XML 文档的方法 – 定义 XML 部分和模式的方法 – 格式化 XML 文档的方法
XML/XSL 结构
XSL 的优点
它把 XML 数据转换成 HTML 格式 它可以过滤和排序 XML 数据 它可以寻址部分 XML 文档 它可以根据数据值格式化 XML 数据 例如,负的帐户差额是用红色显示的 它可以将 XML 数据输出到除传统的输出设备以外 的其它设备,如手持设备、语音设备和其它类似的 设备
<xsl:value-of> 元素
xsl:value-of 元素用来抽取 XML 文档中某个节 点的值 xsl:value-of 元素用来创建结果树中的一个文本 节点 它的语法如下: <xsl:value-of select=”expression” disable-outputescaping=”yes or no” />
ASP XSLT模板语法

ASP XSLT模板语法XML文档需要使用XSLT进行数据转换,才能在浏览器中显示其文档数据。
XSLT能够显示XML文档数据是通过XSLT模板来实现的。
XSLT文件可以称为XSLT样式表或模板文件,其扩展名为.xsl。
与XML文档类型,XSLT文件由元素及其内容构成,并且遵循W3C规范,所以XSLT样式表也是有效且规范的XML文件。
其中,属性match是模板的必需属性,值必须是与XML文档标记相匹配的字符串,称为标记匹配模式。
标记匹配模式主要用来指定要从XML文档中开始寻找和提取数据的标记。
如果没有为match设置属性,表示从文档的根元素处开始查找和提取数据,其默认值为“/”。
如果要为其设定属性值,则需要为其根据XML文档的树状结构,给出要提取数据元素的完整路径。
XSLT样式表中必须存在一个根模板。
所谓根模板就是和XML文档中根标记匹配的模板。
如果使用浏览器来处理XSLT转换,则根模板的标记匹配模式必须是“/”。
当处理器进行XML文档转换时,必须先查找到根模板,然后再从根模板开始进行XSLT转换。
根模板的内容中可以包括其他的模板调用标记。
如果样式表中没有根模板,那么该样式表就不起任何作用。
1.模板标记在每一个实际的XML文档中,肯定包含有根标记和多个子标记,他们是很重要的一类标记。
XSLT样式表转换时应当为根标记和这些子标记提供输出数据的模板。
这些模板的标记匹配模式可以是根标记名称、子标记名称和根元素名称等。
例如,下面是一个视频网站中使用的XML文档,代码如下所示。
现在便可以使用XSLT的标记匹配模式来选择XML文档中的节点。
●根标记的任意级别与XML标记浏览次数匹配的模板。
●要创建标记为视频/名称,并且具有编号属性的匹配模板,如果要确定标记2.模板调用在转换并显示XML文档数据内容时,XSLT处理器必须先查找到根模板,在对根模板的变换过程中,再使用XSLT模板标记调用其他的模板。
XSLT转换中,使其中,元素apply-templates表示应用模板规则,用于将模板规则应用到相应的子标记中。
什么是XSLT

1. 什么是XSLT大家可能听说过XSL(eXtensible Stylesheet Language),XSL和我们这里说的XSLT 从狭义上理解是一样的,而按照W3C的标准,XSLT的说法更严格些,因此我们在文章中统一使用XSLT的称法。
XSLT的英文标准名称为eXtensible Stylesheet Language Transformation。
根据W3C的规范说明书(/TR/xslt),最早设计XSLT的用意是帮助XML文档(document)转换为其它文档。
但是随着发展,XSLT已不仅仅用于将XML转换为HTML或其它文本格式,更全面的定义应该是:XSLT是一种用来转换XML文档结构的语言。
2. 为什么要用XSLT我们已经知道,XML是一种电脑程序间交换原始数据的简单而标准的方法。
它的成功并不在于它容易被人们书写和阅读,更重要的是,它从根本上解决了应用系统间的信息交换。
因为XML满足了两个基本的需求:(1).将数据和表达形式分离。
就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。
(2).在不同的应用之间传输数据。
电子商务数据交换的与日俱增使得这种需求越来越紧迫。
为了使数据便于人们的阅读理解,我们需要将信息显示出来或者打印出来,例如将数据变成一个HTML文件,一个PDF文件,甚至是一段声音;同样,为了使数据适合不同的应用程序,我们必须有能够将一种数据格式转换为另一种数据格式,比如需求格式可能是一个文本文件,一个SQL语句,一个HTTP信息,一定顺序的数据调用等。
而XSLT就是我们用来实现这种转换功能的语言。
将XML转换为HTML,是目前XSLT最主要的功能前言大家好,从今天起我们将一起来学习XML家族的另一种语言XSLT,XSLT类似HTML中的CSS,不过比CSS功能要强大的多。
学习XSLT的前提是你对XML已有一些了解,如果你没有学习过XML,能先点这里(http: ///columns/xml_1.shtml)看我先前写的一篇文章《XML轻松入门手册》。
XSLT 经典教程

XSLT 教程 1.基础 XSLT 首页Next Page XSL 指扩展样式表语言(EXtensible Stylesheet Language)。
万维网联盟开始发展 XSL 的起因是由于对基于 XML 的样式表语言的需求。
XSLT 指 XSL 转换。
在此教程中,你将学习如何使用 XSLT 将 XML 文档转换为其他文档,比如 XHTML。
开始学习 XSLT !XSLT 参考手册XSLT 元素 对所有来自 W3C 标准的 XSLT 元素进行了描述,以及关于浏览器支持的信息。
XSLT 函数 XSLT 包含了超过 100 个内置函数。
这些函数可以用于字符串、数值、日期和时间比较、 节点和 QName 处理, 序列处理, 逻辑值等等。
内容目录XSL 语言 详细解释 XSL 的子语言: XSLT、XPath 和 XSL-FO。
XSLT 简介 XSLT 的简介。
包括其概念和作用。
XSLT 浏览器 支持 XSLT 的浏览器总论。
XSLT 转换 如何使用 XSLT 将 XML 文档转换为 XHTML 文档。
XSLT 模板 <xsl:template> 元素包含了当指定的节点被匹配时所能应用的规则. XSLT <xsl:value-of> 元素 <xsl:value-of> 元素可提取选定节点的值。
XSLT <xsl:for-each> 元素<xsl:for-each> 元素允许您在 XSL 中进行循环。
XSLT <xsl:sort> 元素 <xsl:sort> 元素用于对输出进行排序。
XSLT <xsl:if> 元素 <xsl:if> 元素用于针对 XML 文件的内容放置一个条件测试。
XSLT <xsl:choose> 元素 <xsl:choose> 元素被用来与 <xsl:when> 和 <xsl:otherwise> 配合使用,来表达多重 的条件检验。
无需编程,一步步教你把xls格式测试用例转为xml,方便TestLink导入

无需编程,一步步教你把xls格式测试用例转为xml,方便TestLink导入摘要:一直用开源工具TestLink来管理测试用例,最近升级到1.9.3版本后,被用例导入困扰了很久。
相信用过的人都知道,新版的TL导入用例有两个问题,一是直接导入xls格式会报错;二是如果要通过xml文件导入,需要将测试用例转换为xml格式。
而大多数公司的测试用例都是Excel的,若直接将xls另存为xml,很多人都被卡在了“xml没有映射关系”这个地方。
一开始也准备写个程序去做个转换,但是第六感告诉我,不需要这么麻烦!(程序员都很懒)。
只要有钻研精神,没有什么解决不了的问题。
下面就带领大家一步步搞定用例的导入。
说明:xml_module.xml - xml映射关系模版,用于添加到测试用例作为xml映射关系TestCase_Module.xls - 测试用例模版步骤:Step 1:分析TestLink用例的xml结构先在TL里写个用例,然后导出为xml格式,经过分析,得到如下图的基本结构。
(注:这个结构是我需要的几个关键节点)把它保存为一个xml文件,它就是我们需要的xml映射关系的模版。
Step 2:xls格式的测试用例导入映射关系,并保存为待导入TL用例的xml如下图,这是我根据上步得到的关键节点做的测试用例模版,打开office2010的“开发工具”项,选择“源”。
选择“xml映射...”, 把Step1保存的xml映射关系模版添加并确定。
从右侧面板里拖动映射节点到对应的Excel列上拖动完成后如下图最后把此Excel的用例另存为xml格式就可以导入到TestLink中去了!。
XSLT介绍

XSLT介绍XSLT是一种将XML文档转换为其他文本文档的语言,是建立在XML和XPath之上的国际标准,内容比较多,功能强大。
对于编程人员来说,XSLT可以看作以前序遍历的方式专门处理XML树状结构的标记语言。
以前编程根据XML文档输出纯文本数据时需要写代码以前序遍历方式的方式遍历XML文档对象组成的树状结构,对于每一个特定名称或特定层次的XML节点而输出不同的内容,这个过程比较复杂,代码量大,需用进行很多的状态判断。
而XSLT则使用一种简洁明了的标记语言实现了相同的逻辑。
因此XSLT从程序逻辑的角度看类似支持递归的编程语言,而且是专门处理XML文档的。
XSLT转换过程会涉及到三个文本文档,一个是要处理的原始XML文档,第二个就是XSLT样式表文档,该文档包含了XSLT代码,XSLT代码本身就是XML格式,但使用了XML的名称空间。
第三个就是XSLT处理输出的文本文档,注意,此处输出的是纯文本文档,这个文档具体是什么格式完全靠XSLT代码来决定,可以是另外一个XML文档,HTML文档,SQL语句字符串或者其他任意格式的字符串数据等等,XSLT转换只能输出纯文本文档,此外就没有限制输出文档的具体格式。
数据XML文档是一个很简单的XML文档,此处不加说明了。
重点说说XSLT样式表文档,XSLT 样式表文档本身是一个XML文档。
它采用XML的树状结构来描述递归处理过程,也比较好理解。
在样式表文档中,根元素为xsl:stylesheet,里面定义了一个名为xsl的名称空间,这个根节点及其属性值都是固定的。
xsl:output元素是可选的,它的method属性用于指定输出文档的格式,可以设置为xml,html或text 值。
此处使用xml输出样式,说明输出的文档是XML格式的,XSLT转换会尽量生成XML文档,但不作保证,因此仍然有可能生成不合格的XML文档。
xsl:template用于定义一个XSLT模板,模板类似编程语言中的函数,可实现XSLT代码的重用。
关于利用xstl将xml转换成xml或html

关于利用xstl将xml转换成xml或html最近项目上用到了xstl,看了几天小有收获。
XSTL(extensiblestyling language transformation ):最主要的功能是将xml转换为html或其他格式的文件,其是一种格式制定工具。
以下是个小例子,将xml转换成需要格式的xml,代码如下:p1.xml 文件内容:<?xml version="1.0" encoding="UTF-8"?><list><lqx><name>lqx</name><age>20</age><borth>2012-11-30 13:22:09.78 CST</borth></lqx><lqx><name>yl</name></lqx></list>d1.xstl内容<xsl:stylesheet version="1.0"xmlns:xsl="/1999/XSL/Transform"><xsl:template match="/"><EMPS><EMP><xsl:for-each select="//lqx"><EMP__NAME><xsl:value-of select="name"/></EMP__NAME><EMP__AGE><xsl:value-of select="age"/></EMP__AGE><EMP__BORTH><xsl:value-of select="borth"/></EMP__BORTH></xsl:for-each></EMP></EMPS></xsl:template></xsl:stylesheet>需要用到的java程序如下:public void convert(){StreamSource xml=new StreamSource(new File("d:/p1.xml"));//源文件StreamSource xsl=new StreamSource(new File("d:/d1.xsl"));//xslStreamResult result=new StreamResult(new File("d:/h.xml"));//目标文件TransformerFactory tFactoy=TransformerFactory.newInstance();Transformer transformer=tFactoy.newTransformer(xsl);transformer.transform(xml,result);}经过转换得到所需格式的xml,但很乱,全部连在一起,在网上查到用<xsl:text> 
</xsl:text>可在显示xml时达到换行的效果,所以改xstl如下:<xsl:stylesheet version="1.0"xmlns:xsl="/1999/XSL/Transform"><xsl:template match="/"><xsl:text> </xsl:text><EMPS><xsl:text> </xsl:text><EMP><xsl:text> </xsl:text><xsl:for-each select="//lqx"><EMP__NAME><xsl:value-of select="name"/></EMP__NAME><xsl:text> </xsl:text><EMP__AGE><xsl:value-of select="age"/></EMP__AGE><xsl:text> </xsl:text><EMP__BORTH><xsl:value-of select="borth"/></EMP__BORTH><xsl:text> </xs l:text></xsl:for-each></EMP><xsl:text> </xsl:text></EMPS></xsl:template></xsl:stylesheet>经新的xstl再次转换后,达到如下效果:<?xml version="1.0" encoding="UTF-8"?><EMPS><EMP><EMP__NAME>lqx</EMP__NAME><EMP__AGE>20</EMP__AGE><EMP__BORTH>2012-11-30 13:22:09.78 CST</EMP__BORTH><EMP__NAME>yl</EMP__NAME><EMP__AGE/><EMP__BORTH/></EMP></EMPS>总结:xstl和xml完全兼容所以对xml的一些处理,也适应于xslt,xstl最常用到的是xml向html的转换,用法和对xml的转换类似,毕竟xml的最初的设计目标也是为了代替html,所以能转成xml,当然html 也不在话下。
智能文档内容XML的XSLT利用

智能文档内容XML的XSLT利用一.前言智能文档内容XML是利用智能文档的格式化全文信息即OpenXML,进行二次解析,获得内部定义的一个结构化描述的XML内容,结构化描述只是一切的开始,智能文档的应用同时还需要解决以下4个基础性问题:●信息集成●结构化描述●长期存储●安全控制通过ZLBH的数据、权限管理结合Oracle XML 数据库技术已经很好的解决了以上的问题。
在此基础上,还要对结构化描述的数据进行深层次的利用,比如说:●检索/抽取●转换●多数据源集成上面的“检索/抽取“通过Oracle XML DB的Xquery查询可以实现,”转换“和”多数据源集成“这两项应用就需要通过XLST的运用了。
本文将就智能文档的内容XML的XSLT转换的应用进行简述。
二.智能文档内容XML结构智能文档内容XML结构如下:通常一篇智能文档实例根节点下通常包含以下几种类型节点1.页脚节点2.页眉节点3.提纲外的元素节点4.提纲内的元素节点5.提纲外文本节点6.段落节点7.表格/表格单元格(无限嵌套其他元素)8.数字签名节点下图为智能文档中一篇入院记录在Word中的显示效果,图中标出了对应XML节点在文档中显示的位置。
后面将通过XSLT的转换将此篇文档通过HTML转换成需要的格式,值得一提的是通过Word本身可以另存为HTML文件,但是其文档的排版内容转换的差强人意,不能达到满意的效果。
三.XLST转换就示例文档结构,实验通过XLST将内容XML的数据转换成HTML文档,目标是将内容XML定义的节点转换成HTML上可展示的部分,包括:页眉、页脚、提纲外文本、提纲外元素、表格、表格内提纲、签名节点。
最后的展示效果如下图:其中运用到XSLT和XPATH的基础内容,XSLT代码本身的编写用到了Stylus Studio 2010;XSLT部分1.XSLT顶层元素根元素<xsl:stylesheet>和<xsl:transform>都是根元素,完全没有区别<xsl:stylesheet version="1.0"xmlns:xsl="/1999/XSL/Transform"><xsl:transform version="1.0"xmlns:xsl="/1999/XSL/Transform">Version 指定了Xslt的版本,对应不同的版本所能使用的XPATH函数有不同●输出元素<xsl:output method="html" encoding="UTF-8"/>这里指示XSLT的输出为HTML文件,编码格式是UTF-8;xsl:output还可以是 text、xml;如果没有指定则是默认是xml2.<xsl:template>元素<xsl:template>是Xslt的基础元素,用于匹配指定节点时需要应用的规则,通过match属性用于将模板关联到某个XML元素上;注意:<xsl:template>不能嵌套使用!<xsl:template match="/ ">定义了整个文档;智能文档内容XML的根元素是doc,通过 <xsl:template match="doc">定义为doc根元素;注意:任何一个XLST文件至少要包含一个模板如果要将页眉节点作为上下文则为<xsl:template match="sdheader ">,表示从XML选取满足节点名称为sdheader的节点,在此上下文上操作页眉内的元素节点和文本节点,通过<xsl:apply-templates> 选择应用模板,例如选择所有页眉的元素节点:<xsl:template match="doc"><xsl:apply-templates select="sdheader/sdelement"/></xsl:template>或<xsl:template match="/"><xsl:apply-templates select="doc/sdheader/sdelement"/></xsl:template>注意:这里很有必要解释一下<xsl:apply-templates>和<xsl:template>的区别●xsl:template的作用是定义一个新模板。
基于XSL-FO的XML文档到其他格式文档的转换

基于XSL-FO的XML文档到其他格式文档的转换作者:王梅娟史涯晴赵改连来源:《电脑知识与技术·学术交流》2008年第29期摘要:XML(eXtensible Stylesheet Language)是目前流行的内容存储格式,而PDF (Portable Document Format)是电子文档的内容载体格式,如何将XML文档转换成PDF及其他一些用于显示的文档格式越来越受到人们的关注。
FOP(格式对象处理器Formatting Objects Processor)是由James Tauber开发的一个开源项目,目的是利用XSL-FO将XML文档转换成PDF、TXT、DOC等文档,该文仅以PDF文档为例,介绍如何利用FOP将XML文档转换为其他文档格式。
关键词:XML;XSL-FO;XSLT;FOP;文档转换中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)29-0425-04Transformation from XML to other Document Format Based on XSL-FOWANG Mei-juan1, SHI Ya-qing1, ZHAO Gai-lian2(1.School of Science,PLA University of Science and Technology,Nanjing211101,China;2.College of Information Engineering,Yangzhou Polytechnic College,Yangzhou 225000,China)Abstract: XML(eXtensible Stylesheet Language) is used for data management,which is popular now;while PDF(Portable Document Format)is used for presenting electronic documents.The transformation from XML to PDF and other document format become more and more necessary. FOP(Formatting Objects Processor) is developed by James Tauber,this paper introduces using FOP to transform from XML documents to other documents like PDF by XSL-FO.Key words: XML; XSL-FO; XSLT; FOP; document transformation1 引言XML适合于描述文档结构和内容,PDF适合于维护电子化页面视图描述,网络中应用背景的不同使文档的组织方式和表现方式差异很大,为了实现文档内容的共享和协作,必须进行文档格式间的转换。
XSL概念与应用

<fo:layout-master-set>
• <fo:layout-master-set> 元素指定页面定义。 • 在简单的文档中,一个布局可能就足够了,但复杂的文档通常有几个 页面定义。 • <fo:layout-master-set> • • • • <fo:simple-page-master master-name="main" margin-top="36pt“ margin-bottom="36pt" page-width="8.5in" page-height="11in" margin-left="72pt" margin-right="72pt"> <fo:region-body margin-bottom="50pt" margin-top="50pt"/>
• <fo:root> • <fo:layout-master-set> • <fo:simple-page-master> • <fo:region-body> • <fo:page-sequence> • <fo:flow> • <fo:block> 和 <fo:inline>
<fo:root>
XSL 格式化对象
XSL-FO 文档概述
• XSL-FO 文档定义了制作高质量可打印文档时非常重要的几件事情: – 有关页面的实际大小的信息(信纸和 A4 等等) – 有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其 它特性的信息 – 有关文本的字体、字体大小、颜色和其它特征的信息 – 要打印的实际文本,由描述段落、突出显示、表等类似物的元素 来标记
使用XSLT从XML生成PostScript

使用XSLT 从XML 生成PostScript使用XSLT 作为编译器常用缩写词∙CSS:层叠样式表(Cascading Stylesheet)∙JVM:Java 虚拟机(Java Virtual Machine)∙PDF:可移植文档格式(Portable Document Format)∙RTF:富文本格式(Rich Text Format)∙XHTML:可扩展超文本标记语言(Extensible Hypertext Markup Language)∙XML:可扩展标记语言(Extensible Markup Language)∙XSLT:可扩展样式表语言转换(Extensible Stylesheet Language Transformation)使用XSLT 可以将XML 数据转换成任意的其他数据格式。
通常XSLT 被视为XML 到XML 的转换语言,它以XML 文档为输入并将其转换为其他XML 结构(包括XHTML),但是它实际上可用于生成任意输出,而不仅仅是XML。
在考虑这种方法时,XSLT 样式表实际上是定义新语言的工具,并且可被视为语言编译器。
使用这种文字编译器似乎可能有些古怪。
通常,编译器被视为把人类可读代码转换为机器语言或虚拟机字节码的程序,但是一般意义上的编译器只是一个转换器:把一种语言编译成另一种语言。
目标语言通常为二进制格式(如机器代码),但不总是这种格式。
从这个角度讲,XSLT 是一项编译器技术。
XSLT 样式表将隐式定义一种新语言,XML 方言(XML dialect),它将编译为不同的形式,可以是其他XML 方言或其他语言。
以XSLT 作为编译器的这个概念为例,如果需要通过XML 生成Java™ 代码,假定需要生成Java bean 作为对象-关系映射系统的一部分,您可以使用XSLT 完成此操作。
Java bean 是带有默认构造函数(不获取参数的构造函数)的Java 类,它将公开允许调用者读取和设置对象属性的getter和setter方法。