java - XStream实体缩写解析

标签 java xml xstream

我目前正在尝试解析日语 JMdict xml 文档,它声明了一堆 ENTITY整个文档中使用的引用文献。
就像这里的这一点:

<!ENTITY MA "martial arts term">
<!ENTITY X "rude or X-rated term (not displayed in educational software)">
<!ENTITY abbr "abbreviation">
<!ENTITY adj-i "adjective (keiyoushi)">
<!ENTITY adj-ix "adjective (keiyoushi) - yoi/ii class">

然后在 xml 中引用像这样 <field>&MA;</field>

XStream 不喜欢这个,要求我修复这个问题,然后立即抛出 ConversionException然后退出。

有没有办法自动识别这些实体并将它们交换出来?
我不想写 170 行 xml = xml.replace(one, other);

我只是使用 XPP3,然后使用注释从数据创建 POJO。没有自定义解析器。

最佳答案

既然您说您正在使用 XPP3,我假设您正在像这样创建 XStream 对象:

XStream xstream = new XStream();  //uses XPP3

问题是XPP3显然does not resolve entities开箱即用:

...it is user responsibility to resolve entity reference.

因此,除非您想实现实体解析,否则您需要使用解析实体的解析器。如果你想继续使用拉解析器,你可以使用 StAX像这样:

XStream xstream = new XStream(new StaxDriver());

或者您可以使用 DOM (不是拉式解析器;将整个文档加载到内存中):

XStream xstream = new XStream(new DomDriver());

关于java - XStream实体缩写解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035383/

相关文章:

Java:线程不会同时 ping

java - 如何让 Jersey 客户端在根请求实体周围写入 `[` 和 `]`?

java - 如何使用 XStream 序列化/反序列化类型层次结构中的对象?

java - Xstream 和枚举解码 : No enum constant

java - 使用 PlayFramework 在 Azure 网站中登录

java - 这是 Java 中接口(interface)的正确结构吗?

ruby-on-rails - ruby rails : Using XML Builder Partials

sql - 在 PostgreSQL 的 TEXT 列上使用 XMLEXISTS

java - 如何处理 XStream 中的循环引用?

java - 使用 REST API 创建新站点