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