【发布时间】:2020-07-01 08:09:24
【问题描述】:
我正在使用 XSLT 转换一些 XML 文件。
这里是我使用的脚本
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 XsltTransformer {
public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
String xmlFile = "/my/directory/file.xml"; //put path of input XML file between ""
String xslFile = "/my/directory/file.xsl"; //put path of input XSL file between ""
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File(xslFile));
Transformer transformer = factory.newTransformer(xslt);
Source text = new StreamSource(new File(xmlFile));
transformer.transform(text, new StreamResult(new File("/my/directory/output.xml"))); //put path of newly created XML file between ""
}
}
这样我可以处理一个文件并且它可以工作。
但是,我需要扩展代码来处理遍历目录的多个 xml 文件。
结构是:
DirA
|
|-->SubDirA1
| |
| |---->XMLFile
|
DirB
|
|-->SubDirB1
| |
| |---->XMLFile
|
...
我认为这个问题已经部分回答了here 但是,我从未按照建议使用过 ant。
【问题讨论】:
-
如果你切换到 Saxon 9 或 10 并且只需要一个命令行程序,那么我认为你可以使用它的命令行选项来传递源目录和结果目录。如果你想在 Java 级别实现它,那么你需要使用它的文件/目录 api 来查找和加载任何输入文件并重复运行 XSLT,通常你只会使用 newTemplates 而不是 newTransformer 编译一次。