【问题标题】:How to read XML styled text file in java?如何在 java 中读取 XML 样式的文本文件?
【发布时间】:2019-07-11 19:15:37
【问题描述】:

我想阅读下面的Java文本格式的XML文件,

XML 文件:

    <Sample>
     <DATA>
       <ID>12345</ID>
       <NAME>Person1</NAME>
       <MAIL>sa@gmail.com</MAIL>
       <Class>A&B</Class>
    </DATA>
    <DATA>
       <ID>12345</ID>
       <NAME>Person1</NAME>
       <MAIL>sa@gmail.com</MAIL>
       <Class>A<B</Class>
    </DATA>
   </Sample>

我使用 JAXB 来读取这个 xml 文件,为此我也添加了一个带有注释的 POJO 类。解组 XMl 文件时出现以下异常

[org.xml.sax.SAXParseException : The entity must immediately follow the '&' in the entity reference.]

任何人都可以建议我阅读此 xml 的最佳方法吗?

【问题讨论】:

  • 严格来说,这不是有效的 XML。您应该要求该 XML 的创建者正确地转义 &amp; 等,或者将它们包装在 CDATA 部分中。这就是为什么不应该通过简单的字符串处理来生成 XML 的原因(除非非常小心)
  • @GyroGearless :不知道他们是否会这样做。将与他们核实。谢谢伙计。

标签: java dom jaxb


【解决方案1】:

参见link - 如错误所述,XML 需要实体引用。您需要使用&amp;amp;&amp;gt; 来表示大于号。您正在使用的 Saxon 库应正确处理这些 URL 编码的字符。

当 XML 解析器在 XML 数据中找到一个 & 符号时,它希望找到一个符号名称和一个分号。符号名称提供对另一个实体或字符的符号引用,例如与号、大于和小于字符。

【讨论】:

  • 是的,我从某个外部来源获取此文件,我尝试使用 StringEscapeUtils.escapeXml(xml) commons.lang 包方法替换所有“”, ',&" 与相应的 html 实体 >,<,&。但是,如果我解开此内容,则会出现 xml 解析异常。
  • 好吧,除非您获得有效的 XML,否则您将无法将其解组、解析或以其他方式将其作为 xml 处理。正如其他人在上面所说,除非您可以获取发送有效 XML 的源,否则您需要使用正则表达式来查找和替换不匹配的 &lt;&gt;&amp;s 而不带符号和分号。
猜你喜欢
  • 2011-01-12
  • 1970-01-01
  • 2011-01-20
  • 2011-11-11
  • 2013-08-03
  • 2011-02-16
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多