用 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.Transformer
和 javax.xml.transform.TransformerFactory
类的 API 文档。
【讨论】:
如果您能提供相关类的 Java 6 javadocs 链接和一个简单的代码示例,那就太好了。【参考方案4】:JAXP 提供了一种独立于实现的方式来处理 XSLT 转换。 Here is the tutorial 让您开始。如果您正在使用大型 XSLT 和/或使用多个 XSLT,那么出于性能原因,还可以选择缓存已解析的 XSLT 模板。 This article 解释如何缓存 xslt 的
【讨论】:
好像没了。以上是关于用 Java 处理 XSLT?的主要内容,如果未能解决你的问题,请参考以下文章