我正在尝试使用 Java 编辑 XML 文件中实体的链接。
事实上,原始链接是一个互联网链接,我想在解析文档时将其转换为本地链接。 顺便说一句,我将下载我们可以通过此链接获得的内容。
这是原始链接:
<!ENTITY % ISOEntities PUBLIC "ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML" "http://www.website.com/category/xml_schema/ISOEntities">
这就是我想要的结果
<!ENTITY % ISOEntities PUBLIC "ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML" "C:\data\xml\entities\ISOEntities">
所以我想做的基本上是当检测到原始链接时,我想从本地链接(而不是互联网链接)导入数据 ISOEntities,但是不更改原始链接(我不会在文件中写入以更改链接)。
我该怎么做? 感谢您的帮助!
最佳答案
适当的方法会有所不同,具体取决于您使用哪个 XML 库来解析数据,但基本概念是向解析器插入一些配置,以拦截加载特定实体的请求并将它们重定向到本地缓存的副本。对于 javax.xml.parsers
的 SAX 和 DOM 解析器,这意味着 EntityResolver
:
EntityResolver resolver = new EntityResolver() {
public InputSource resolveEntity(String publicId, String systemId) {
if("ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML".equals(publicId)) {
return new InputSource("file:/C:/data/xml/entities/ISOEntities");
} else {
return null; // use the default resolution logic
}
}
};
您可以将该实体解析器传递给 XMLReader
(对于 SAX)或 DocumentBuilder
(对于 DOM),它将从本地副本加载 ISO 实体。如果您可以传入适当配置的 XMLReader
您的自定义实体解析器。
关于java - 使用 java 编辑 XML 实体的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352951/