java - 使用 java 编辑 XML 实体的链接

标签 java xml parsing

我正在尝试使用 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/

相关文章:

xml - 为什么此xpath与该文本节点匹配?

c# - 如何从 C# 中的大型 html 字符串中删除所有 <a></a> 标记?

xml - 如何使用 XSL 解析带有图像 url 的分隔列表?

java - 无法解决maven项目中的import classes

Java:Json 有键/字段

java - Maven 构建跳过清理和验证阶段

c# - C# 文档标签是什么?

java - 如何在Java中解析具有混合节点和文本的XML?

xml - xbrl us gaap contextRef 标准?

java - 签名 jar 的作者未知