用 Java 处理 XSLT?

Posted

技术标签:

【中文标题】用 Java 处理 XSLT?【英文标题】:XSLT processing with Java? 【发布时间】:2011-06-04 00:29:03 【问题描述】:

如何使用 JDK 在 Java 中使用 XSLT 处理器转换 XML?

【问题讨论】:

好问题,+1。请参阅我的回答以获取指向 Saxon 文档的指针以及重要通知,即在许多情况下,无需了解 Java 即可使用基于 Java 的 XSLT 处理器。 这个答案有一个准确的答案,对于新手来说答案是什么并不是很明显。这个问题应该重新打开。 话题,因为..你知道,在程序员语言中使用程序员工具在这里是题外话...smh。 【参考方案1】:

这是使用 java api 进行转换器的示例,正​​如@Raedwald 所说:

import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class TestMain 
    public static void main(String[] args) throws IOException, URISyntaxException, TransformerException 
        TransformerFactory factory = TransformerFactory.newInstance();
        Source xslt = new StreamSource(new File("transform.xslt"));
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File("input.xml"));
        transformer.transform(text, new StreamResult(new File("output.xml")));
    

输入也可以来自字符串或 DOMSource,输出可以是 DOMSource etc。

【讨论】:

多么好的例子啊!!非常感谢!【参考方案2】:

我是 xslt 的新手。谁能指导我 如何用java进行xslt处理?

这取决于您使用的基于 Java 的 XSLT 处理器。每个 XSLT 处理器都有自己的 API。

例如,Saxon 6.5.5(用于 XSLT 1.0)和 Saxon 9.1.07(用于 XSLT 2.0)是用 Java 编写的。文档位于 http://www.saxonica.com/documentation/documentation.xml

几乎所有 XSLT 处理器都有一个命令行实用程序,无需编写程序即可执行 XSLT 转换。

例如,here is如何从命令行启动 Saxon 9.x 转换

这是我在命令行中始终使用 Saxon 的方式

java -Xms2048M  -Xmx10000M  -jar  
     C:\xml\Parsers\Saxon\Ver.9.1.0.7\J\saxon9.jar 
    -t  -repeat:1  -o %out%  %xml%  %xsl%  %param[ name=\"value\"]%

其中%out% 是输出文件的名称,%xml% 是 xml 文件,%xsl% 是主 xslt 文件,%param[ name=\"value\"]% 是外部参数的名称-值列表(我几乎总是把这个空)。

【讨论】:

有一个用于 XSLT 的标准 API,请参阅包 javax.xml.transform。我会使用它来支持任何具有自己 API 的第三方库,除非有一些令人信服的理由需要使用特定的第三方库。 @Jesper:我们幸运使用 API 并不是唯一的方法!大多数使用任何 XSLT 处理器的 XSLT 程序员不是 Java 程序员。如果他们被剥夺了使用像 Saxon 或 Xalan 这样出色的 XSLT 处理器的权利,那将是完全不幸和不合理的损失。事实上,生产需要 Java 编程才能使用的基于 Java 的 XSLT 处理器根本不会有利可图。 @Dimitre 但问题是关于如何使用 Java 进行 XSLT 处理;谈论其他方法(不是通过 API)是不相关的。如果您打算使用某些 API 来执行此操作,请使用标准 API,除非有令人信服的理由使用某些非标准 API。 @Jesper:不公开在没有任何编程的情况下使用 XSLT 处理器的方式将损害 OP 和任何其他读者,并误导他们相信编写程序是唯一的方法去做这个。我的回答是一个明确的信息:更好更方便的方法;只有在你的情况下才能编写程序。【参考方案3】:

Java 标准库为 XML 解析提供了一个 (XSLT) 转换接口。请参阅 javax.xml.transform.Transformerjavax.xml.transform.TransformerFactory 类的 API 文档。

【讨论】:

如果您能提供相关类的 Java 6 javadocs 链接和一个简单的代码示例,那就太好了。【参考方案4】:

JAXP 提供了一种独立于实现的方式来处理 XSLT 转换。 Here is the tutorial 让您开始。如果您正在使用大型 XSLT 和/或使用多个 XSLT,那么出于性能原因,还可以选择缓存已解析的 XSLT 模板。 This article 解释如何缓存 xslt 的

【讨论】:

好像没了。

以上是关于用 Java 处理 XSLT?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中链接 XSLT 处理器?

Saxonica EE Xslt 转换处理无限循环

XSLT 与 Java集成常见技术关键点

哪些浏览器支持 XSLT 2.0?

两阶段处理:不要从阶段 1 XSLT 2.0 处理中输出空标签

Xerces2 XML 解析器和 Xalan XSLT 处理器——状态和替换?