`
persistC
  • 浏览: 73507 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XSLT2.0---多文件输出

    博客分类:
  • XSLT
阅读更多
<xsl:result-document>指令用于输出内容到文件。
XML源文档:
 <?xml version="1.0" encoding="GB2312"?>
   <root>
  <item f1="浙江" f2="绍兴" f3="aaa"/>
  <item f1="江苏" f2="苏州" f3="bbb"/>
  <item f1="浙江" f2="杭州" f3="ccc"/>
  <item f1="山东" f2="济南" f3="ddd"/>
  <item f1="山东" f2="青岛" f3="aaa"/>
  <item f1="江苏" f2="南京" f3="fff"/>
  <item f1="山东" f2="青岛" f3="ggg"/>
  <item f1="江苏" f2="南京" f3="hhh"/>
  <item f1="山东" f2="济南" f3="iii"/>
 </root>
XSLT文件:
 <?xml version='1.0'?>
<
xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:output method="html" encoding="GB2312" name="output"/>
<
xsl:template match="/">
    <xsl:for-each-group select="root/item" group-by="@f1">
        <xsl:sort select="@f1"/>
        <xsl:variable name="filename" select="concat('province',position())"/>
        <xsl:result-document href="{$filename}.html" format="output">
             <xsl:value-of select="concat(@f1,'-')"/>
             <xsl:for-each-group select="current-group()" group-by="@f2">
               <xsl:sort select="@f2"/>
               <xsl:value-of select="concat(' ',@f2,':')"/>
               <xsl:for-each-group select="current-group()" group-by="@f3">
                 <xsl:sort select="@f3"/>
                 <xsl:value-of select="@f3"/>
                 <xsl:if test="position() != last()">,</xsl:if>
               </xsl:for-each-group>
            </xsl:for-each-group>
        </xsl:result-document>
    </xsl:for-each-group>
<
/xsl:template>
<
/xsl:stylesheet>
这里有几个问题需要注意的:
1,当用stylus studio 6.3的sax8.4来解析上面的XSLT文件时,出现错误:java.lang.RuntimeException:The System identifier of the principal output file is unkown.
错误的原因是,处理器不能很好的来解释XSLT2.0,并不是XSLT文件的语法问题。如果使用Stylus studio 2007的saxon8.7.3来解析,一切正常。
2,<xsl:result-document>的href属性要指定路径,那么相对路径跟哪个有关。实际的输出文件路径是相对当前XSLT文件的路径。
3,format属性指定输出的格式,该格式是上面预定义的:
<xsl:output method="html" encoding="GB2312" name="output"/>
如果没有指定输出编码为:GB2312,那输出的文件内容可能是乱码。
4,href="{$filename}.html"中的变量filename必须用大括号括起来。因为href属性的值是字符串,如果直接写成了href="$filename.html",则输出文件名为$filename.html。
这跟<xsl:value-of select="$filename">一类指令中的select属性不同,select属性就是用来指定节点集合(在XPATH2.0中理解为序列)或变量的。用大括号反而会出错。
5,如果href指定的文件名中含有汉字,则生成文件的文件名无法正常显示。这个问题留待解决。
分享到:
评论

相关推荐

    Gestalt XSLT 2.0 processor-开源

    标题中的"Gestalt XSLT 2.0 processor"是一个基于Eiffel编程语言开发的开源项目,专门用于处理XSLT 2.0规范。XSLT(可扩展样式表语言转换)是一种用于XML文档转换的语言,它允许开发者将XML数据转换成其他格式,如...

    xslt实例(实际例子)

    在压缩包中的“xslt实例”文件中,你可以期待看到以下内容: 1. **基础转换示例**:这些实例可能会演示如何将XML数据转换成HTML表格,或者将XML结构转换成更简洁的文本输出。 2. **条件逻辑应用**:可能包含使用`...

    XSLT自动代码生成学习笔记

    XSLT有多个版本,最常用的是XSLT 1.0和XSLT 2.0。XSLT 2.0引入了许多新功能,如函数库、类型系统和更复杂的遍历机制,增强了其在代码生成中的应用能力。 2.3 **EXSLT** EXSLT是扩展XSLT的一个开源项目,提供了许多...

    Beginning xml

    根据提供的文件信息,我们可以从中提炼出与XML相关的多个知识点,主要围绕XML的基础概念、发展历程以及XSLT 2.0的应用展开。 ### XML基础知识 **XML(Extensible Markup Language)**是一种标记语言,用于定义数据...

    XSLT使用的例子

    在这个名为“XsltExample”的压缩包中,很显然包含了一个或多个示例,展示了如何使用XSLT进行实际操作。 首先,理解XSLT的基本结构至关重要。XSLT是基于XML的,因此它的语法遵循XML的规则。XSLT文件通常有三个主要...

    xslt 扩展PDF教程

    解决方案可能是使用EXSLT的广泛接受的模块,或者期待XSLT 2.0及更高版本,其中包含了更多的标准函数和元素,减少了对扩展的依赖。 ### 5. 示例 在示例部分,我们看到了如何使用`&lt;saxon:while&gt;`和`&lt;saxon:assign&gt;`...

    xslt模板转换,xml数据和模板

    9. **内联脚本**:XSLT 1.0支持使用`&lt;xsl:script&gt;`元素内联JavaScript或其他脚本,但XSLT 2.0及以上版本推荐使用XPath 2.0或更高级别的内置函数。 10. **XSLT处理器**:实际执行XSLT转换的是XSLT处理器,如Saxon、...

    XML::XSLT-开源

    值得注意的是,XML::XSLT模块可能不支持最新的XSLT 2.0和3.0规范,因此对于需要更高级特性的项目,可能需要寻找其他解决方案,如XML::LibXSLT(基于libxslt库)。 总之,XML::XSLT为Perl开发者提供了一种强大的工具...

    xml 2.0学习指南

    - XSL-FO(XSL Formatting Objects):用于生成打印输出或PDF的格式化语言。 - DOM(Document Object Model):XML文档的树形表示,用于程序对XML数据的操作。 “使用说明.txt”文件可能会提供关于如何打开和阅读...

    xalan-j_2_7_1-bin.zip

    Xalan-Java可以通过定制的XSLT样式表实现这一功能,通过定义规则来决定何时创建新的输出文件。 Xalan-Java的核心组件包括: 1. XSLT编译器:将XSL样式表转换为可执行的样式表对象。 2. XSLT处理器:执行已编译的...

    XSL基础教程 从 XSLT 样式表调用 JavaScript

    XSLT(Extensible Stylesheet Language Transformations)是一种XML方言,用于转换XML文档结构,以呈现不同的格式或输出到其他媒介。它是W3C标准的一部分,主要用于数据转换和表示。 XSLT是基于模板的,允许开发者...

    xalan jar 2.7.2

    4. **兼容性**:Xalan-J遵循XSLT 1.0和XSLT 2.0标准,确保与大多数XML和XSLT规范兼容。 5. **可扩展性**:支持用户自定义的函数和扩展,可以创建自己的模板和函数库,以满足特定需求。 **使用Xalan-J 2.7.2** 在...

    XSLT Programmer‘s Reference, 2nd Edition(source code for th

    10. **源码分析**:与书本配套的源码文件(XSLT Prog Ref)提供了实际的XSLT样式表,供读者研究和实践,以加深对XSLT的理解。 通过对这本书的学习和实践,IT专业人士能够掌握XSLT的精髓,从而有效地处理XML数据,...

    XLST插入图片有问题

    例如,XSLT 1.0不支持直接在HTML输出中写入二进制数据,而XSLT 2.0及以上版本则可以。如果你使用的是较旧的XSLT版本,可能需要升级或使用特定的技术来绕过限制。 5. **XSLT处理器兼容性**:不同的XSLT处理器对某些...

    常用的Struts 2.0的标签库

    - `s:xslt`: 应用XSLT转换,将Java对象转换为XML并格式化输出。 在实际开发中,这些标签的使用极大地提高了代码的可读性和可维护性,减少了硬编码,使得开发者能够更加专注于业务逻辑。通过结合Struts 2.0的Action...

    xalan-j_2_7_1-bin-2jars.zip

    首先,Xalan-J是一个实现了W3C XSL Transformations (XSLT) 1.0和2.0规范的处理器。XSLT是一种样式表语言,用于将XML文档转换成其他格式,如HTML、PDF或者新的XML文档。它允许开发者通过定义一系列规则来转换源XML...

    xalan-j_2_7_1-bin.zip_JSP上传下载_java xalan_jsp 下载_xalan-j_2_7_1-bi

    Xalan-J 2.7.1是该库的一个特定版本,提供对XSL Transformations (XSLT) 1.0和2.0标准的支持。 JSP文件上传下载是Web应用中常见的功能,对于用户来说,能够上传和下载文件是交互性的重要体现。在JSP中实现文件上传...

    xalan系列jar包

    Xalan是Apache软件基金会的一个开源项目,提供了一个符合XSL Transformations (XSLT) 1.0和2.0标准的实现,这是一种W3C推荐的XML数据转换技术。 1. **Xalan-J**: Xalan-J是Xalan的主要部分,它是一个Java实现的XSLT...

    XSLT for Dummies

    11. **XSLT版本差异**:可能对比不同版本的XSLT(1.0、2.0、3.0等)之间的差异和新增功能。 通过阅读《XSLT for Dummies》,读者可以逐步建立起对XSLT的理解,从简单的数据转换到复杂的逻辑控制,掌握这个强大工具...

Global site tag (gtag.js) - Google Analytics