XStream实体缩写解析

XStream entity abbrieviation parsing

我目前正在尝试解析日语 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());