Аксиома синтаксического анализатора - PullRequest
0 голосов
/ 05 сентября 2018

Я анализирую xml-файл с помощью парсера Axiom. Если элемент xml содержит какую-либо сущность html, анализатор аксиом добавляет его в начале независимо от его положения.

Например:.

<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 голосов
/ 20 ноября 2018

Это вызвано ошибкой в ​​синтаксическом анализаторе StAX в JRE. Когда 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";
    }
}
0 голосов
/ 12 ноября 2018

Проблема подтверждена командой Axiom. Это будет решено в следующем выпуске. Для справки:

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

...