java xlst读取日期_Java中的XSLT转换极其缓慢

示例HTML文件是否使用命名空间?如果是这样,您的XML解析器可能正在尝试从命名空间URI中检索内容(可能是模式)。如果每次运行只需要两分钟就可能发生这种情况 - 可能是一次或多次TCP超时。

您可以通过计算实例化InputSource对象(实际解析WordPress XML)所需的时间来验证这一点,因为这可能是导致延迟的行。在查看您发布的示例文件后,它确实包含一个声明的命名空间(xmlns="http://www.w3.org/1999/xhtml")。

要解决此问题,您可以实现自己的EntityResolver,它基本上会禁用基于URL的解决方案。您可能需要使用DOM - 请参阅DocumentBuilder的setEntityResolver方法。

这是使用DOM和禁用分辨率的示例(注意 - 这是未经测试的):

try {

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbFactory.newDocumentBuilder();

db.setEntityResolver(new EntityResolver() {

@Override

public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {

return null; // Never resolve any IDs

}

});

System.out.println("BUILDING DOM");

Document doc = db.parse(new FileInputStream("/home/pd/XSLT/wordpress.xml"));

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

TransformerFactory tFactory = TransformerFactory.newInstance();

Transformer transformer = tFactory.newTransformer(

new StreamSource("/home/pd/XSLT/transf.xslt"));

System.out.println("RUNNING TRANSFORM");

transformer.transform(

new DOMSource(doc.getDocumentElement()),

new StreamResult(outputStream));

System.out.println("TRANSFORMED CONTENTS BELOW");

System.out.println(outputStream.toString());

} catch (Exception e) {

e.printStackTrace();

}如果要使用SAX,则必须将SAXSource与使用自定义解析程序的XMLReader一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值