gpt4 book ai didi

java - java解析xml时如何缓存dtd文件

转载 作者:行者123 更新时间:2023-12-02 02:04:13 24 4
gpt4 key购买 nike

我正在解析几百万个 xml 文件,其格式如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test-document PUBLIC "-//TEST//TEST DOC//EN" "https://somerandomurl.com/test.dtd">
<test-document>...</test-document>

每次我解析文件时,都会下载相同的 https://somerandomurl.com/test.dtd 文件,这会消耗大量带宽,而且似乎没有必要。有没有办法存储文件并让我的代码重定向我的本地副本?我无法编辑 xml 文件,因此它必须位于我的代码中。给定以下java代码,实现这样的事情的合理方法是什么?

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringComments(true);
factory.setIgnoringElementContentWhitespace(true);
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource("file.xml"));//My final document object.

最佳答案

首先将 DTD 读入字符串变量。

然后做

builder.setEntityResolver(
(sysId, PubId) -> new InputSource(new StringReader(dtd)));

或者,如果您想更加小心,请让 EntityResolver 在返回 dtd 的内容之前检查 systemId 和/或 publicId 是否符合预期。

请注意,这仍然会涉及每次解析 DTD,它只是节省了从网络获取它的成本。

同样重要:实例化 XML 解析器的成本很高(实例化 DocumentBuilderFactory 的成本甚至更高)。确保重用工厂和解析器。

关于java - java解析xml时如何缓存dtd文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051627/

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