【发布时间】:2011-05-04 23:06:12
【问题描述】:
我目前正在使用标准 javax.xml.transform 库通过 XSL 将我的 XML 转换为 CSV。我的 XSL 文件很大 - 大约 950 行。我的 XML 文件也可能很大。
它在原型阶段运行良好,其中一小部分 XSL 大约 50 行左右。现在在“最终系统”中,当它执行转换时会出现错误Branch target offset too large for short。
private String transformXML() {
String formattedOutput = "";
try {
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer =
tFactory.newTransformer( new StreamSource( xslFilename ) );
StreamSource xmlSource = new StreamSource(new ByteArrayInputStream( xmlString.getBytes() ) );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
transformer.transform( xmlSource, new StreamResult( baos ) );
formattedOutput = baos.toString();
} catch( Exception e ) {
e.printStackTrace();
}
return formattedOutput;
}
我遇到了一些关于此错误的帖子,但不太确定该怎么做。
我在代码方面做错了什么吗?
是否有其他可用的第三方变压器可以做到这一点?
谢谢,
安德斯
【问题讨论】:
-
不要使用
xmlString.getBytes(),它会使用默认的平台编码将字符串转换为字节,这可能不是您想要的,因此您的代码依赖于平台。而是使用new StreamSource(new StringReader( xmlString ) ),或者更可取的是,如果从输入流中读取xmlString并将其转换为字符串,则只需使用流中的字节而不是先将它们转换为字符串,这可能也取决于平台。