使用Java进行XSLT处理?[关闭]


76

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


1
好问题,+ 1。请参阅我的答案以获取指向Saxon文档的指针,以及一个重要的通知,即在许多情况下,使用基于Java的XSLT处理器不需要了解Java。
Dimitre Novatchev 2011年

7
这个答案有一个精确的答案,对于新手来说,答案不是很明显。这个问题应该重新讨论。
Raedwald

关于主题,因为..您知道,以编程语言使用编程工具不在此处……smh。
rogerdpack

Answers:


153

这是使用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


1
多么好的例子!非常感谢!
crazyim5

9

我是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转换。

例如,这里是如何从命令行启动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\"]%是外部参数的名称-值列表(我几乎总是将其保留为空)。


8
XSLT有一个标准的API,请参阅package javax.xml.transform。除非有一些令人信服的理由使用特定的第三方库,否则我会优先使用具有自己的API的任何第三方库。
Jesper

1
@Jesper:幸运的是,使用API​​并不是唯一的方法!使用任何XSLT处理器的大多数XSLT程序员都不是Java程序员。如果他们被剥夺使用像Saxon或Xalan这样的出色XSLT处理器的权利,那将是完全不幸和不合理的损失。实际上,生产需要Java编程才能使用它们的基于Java的XSLT处理器根本不会盈利。
Dimitre Novatchev 2011年

5
@Dimitre但是问题是关于如何用Java进行XSLT处理。谈论其他方式(不通过API)无关紧要。如果要使用某些API进行操作,请使用标准API,除非有令人信服的理由使用某些非标准API。
Jesper

1
@Jesper:如果不知道在没有任何编程的情况下使用XSLT处理器的方式,将对OP和任何其他读者都是不利的,并且会误导他们以为编写程序是这样做的唯一方法。我的答案是一个明确的信息:有一个更好,更便捷的方式; 仅在必要时编写程序。
Dimitre Novatchev 2011年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.