gpt4 book ai didi

java - Xerces DOM 解析器非常慢?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:34 25 4
gpt4 key购买 nike

目前,我正在尝试使用 JTidy 清理 HTML 文件,将其转换为 XHTML 并将结果提供给 DOM 解析器。以下代码是这些努力的结果:

public class HeaderBasedNewsProvider implements INewsProvider {

/* ... */

public Collection<INewsEntry> getNewsEntries() throws NewsUnavailableException {
Document document;
try {
document = getCleanedDocument();
} catch (Exception e) {
throw new NewsUnavailableException(e);
}
System.err.println(document.getDocumentElement().getTextContent());
return null;
}

private final Document getCleanedDocument() throws IOException, SAXException, ParserConfigurationException {
InputStream input = inputStreamProvider.getInputStream();
Tidy tidy = new Tidy();
tidy.setXHTML(true);
ByteArrayOutputStream tidyOutputStream = new ByteArrayOutputStream();
tidy.parse(input, tidyOutputStream);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
InputStream domInputStream = new ByteArrayInputStream(tidyOutputStream.toByteArray());
System.err.println(factory.getClass());
return factory.newDocumentBuilder().parse(domInputStream);
}
}

但是,我系统上的 DOM 解析器实现 (com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl) 似乎非常慢。即使是像下面这样的一行文档,解析也需要 2-3 分钟:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title></head><body><div class="text"><h2>Nachricht vom 16. Juni 2011</h2><h1>Titel</h1><p>Mitteilung <a href="dokumente/medienmitteilungen/MM_NR_jglp.pdf" target="_blank">weiter</a> mehr Mitteilung</p></div></body></html>

请注意 - 与 DOM 解析器相比 - JTidy 在一秒钟内完成其工作。因此,我怀疑我以某种方式滥用了 DOM API。

在此先感谢您对此的任何建议!

最佳答案

即使不进行验证,XML 解析器也需要获取 DTD,例如支持命名字符实体。您应该考虑实现 EntityResolver将 DTD 请求解析为本地副本。

关于java - Xerces DOM 解析器非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com