【问题标题】:XStream entity abbrieviation parsingXStream实体缩写解析
【发布时间】:2015-05-16 02:54:21
【问题描述】:

我目前正在尝试解析日语 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中引用像这样&lt;field&gt;&amp;MA;&lt;/field&gt;

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

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

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

【问题讨论】:

    标签: java xml xstream


    【解决方案1】:

    既然您说您使用的是 XPP3,我假设您正在创建您的 XStream 对象,如下所示:

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

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

    ...解析实体引用是用户的责任。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 2011-09-19
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      相关资源
      最近更新 更多