公理解析器实体问题

时间:2018-09-05 13:19:17

标签: xml axiom

我正在使用Axiom解析器解析xml文件。如果xml元素包含任何html实体,则axiom解析器会在开头将其添加,而不考虑其位置。

例如:

<Root>
  <P> This element contains &alpha; html entity. </P>
</Root>

OMXMLParserWrapperObj.getDocumentElement()返回以下输出。

<Root>
  <P>&alpha; This element contains html entity. </P>
</Root>

但是输出应与输入相同。关于如何解决这一问题的任何投入?

我正在使用以下代码:

 try {
  InputStream in;
  OMElement rootOMElement;
  in = new FileInputStream(xmlFile);
  XMLStreamReader parser;

  StAXParserConfiguration standalone = StAXParserConfiguration.STANDALONE;
  parser = StAXUtils.createXMLStreamReader(standalone, in);

  OMXMLParserWrapper createStAXOMBuilder = OMXMLBuilderFactory.createStAXOMBuilder(parser);
  rootOMElement = createStAXOMBuilder.getDocumentElement();
  in.close();
}
catch (XMLStreamException | IOException e) {
  Logger.getAnonymousLogger().log(Level.SEVERE, e.getStackTrace(), e);
}

2 个答案:

答案 0 :(得分:1)

问题已由Axiom团队确认。它将在下一个版本中解决。 供参考:

https://issues.apache.org/jira/browse/AXIOM-490

答案 1 :(得分:1)

这是由JRE中的StAX解析器中的错误引起的。启用IS_COALESCING时,它将以错误的顺序返回事件。要解决此问题,请基于StAXParserConfiguration构建新的STANDALONE,同时也禁止合并:

new StAXParserConfiguration() {
    public XMLInputFactory configure(XMLInputFactory factory, StAXDialect dialect) {
        StAXParserConfiguration.STANDALONE.configure(factory, dialect);
        StAXParserConfiguration.NON_COALESCING.configure(factory, dialect);
        return factory;
    }

    public String toString() {
        return "STANDALONE_NON_COALESCING";
    }
}