【发布时间】:2012-07-31 23:49:42
【问题描述】:
我想使用多个输入文件 (XML/HTML/XHTML) 和相应的 XSLT 来为相应的输入文件生成输出文件。如果只有一个输入 XML 文件和一个输入 XSLT 文件,那么我可以通过以下程序成功转换它。 例如,在给定程序中,我的输入 (X)HTML 文件是 temp.html,输入 XSLT 是 temp.xsl,它产生的输出为 temp_copy.html。 如果我有两个或多个输入文件 temp1.html 和 temp2.html 以及相应的 XSLT temp1.xsl 和 temp2.xsl,那么最好的方法是什么,那么如何使用相应的生成输出 temp1_copy.html 和 temp2_copy.html输入文件? 谢谢!
我当前的 Java 代码:
public class SimpleXSLT {
public static void main(String[] args) {
String inXML = "C:/tmp/temp.html";
String inXSL = "C:/tmp/temp.xsl";
String outTXT = "C:/tmp/temp_copy.html";
SimpleXSLT st = new SimpleXSLT();
try {
st.transform(inXML,inXSL,outTXT);
} catch(TransformerConfigurationException e) {
System.err.println("Invalid factory configuration");
System.err.println(e);
} catch(TransformerException e) {
System.err.println("Error during transformation");
System.err.println(e);
}
}
public void transform(String inXML,String inXSL,String outTXT)
throws TransformerConfigurationException,
TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inXSL);
Transformer transformer = factory.newTransformer(xslStream);
transformer.setErrorListener(new MyErrorListener());
StreamSource in = new StreamSource(inXML);
StreamResult out = new StreamResult(outTXT);
transformer.transform(in,out);
System.out.println("The generated XML file is:" + outTXT);
}
}
class MyErrorListener implements ErrorListener {
public void warning(TransformerException e)
throws TransformerException {
show("Warning",e);
throw(e);
}
public void error(TransformerException e)
throws TransformerException {
show("Error",e);
throw(e);
}
public void fatalError(TransformerException e)
throws TransformerException {
show("Fatal Error",e);
throw(e);
}
private void show(String type,TransformerException e) {
System.out.println(type + ": " + e.getMessage());
if(e.getLocationAsString() != null)
System.out.println(e.getLocationAsString());
}
}
【问题讨论】:
-
这是一个严格的 XSLT 1.0 问题还是 XSLT 2.0 解决方案也可以接受?
-
@DimitreNovaatchev 感谢您的回复。好吧,在我的 XSLT 文件中声明就像 xsl:stylesheet version="1.0",所以我认为它应该是 XSLT 1.0 但是当我在一个文件中将其更改为 xsl:stylesheet version="2.0" 时,它没有任何区别.我对 XSLT 不太了解,所以我不确定 XSLT 2.0 是否可以工作,但如果可以的话,请提供解决方案,以便我尝试。谢谢!
-
@DimitreNovaatchev 同样,这个 java 程序可以完美地处理 .xml 文件,但是当涉及到 .html 文件 (XHTML) 时,它变得非常慢,有时甚至连接超时。