Анализ нескольких фрагментов XML с помощью STaX - PullRequest
3 голосов
/ 28 марта 2012

Я надеялся, что следующее будет разбираться в StAX,

<something a="b"/>
<something a="b"/>

Но он задыхается, когда вы достигаете второго элемента. Так как нет общего корневого элемента. (Я не очень уверен, почему парсер pull заботится об этой конкретной проблеме ... во всяком случае ...)

Я могу подделать корневой элемент, например Гуава:

    InputSupplier<Reader> join = CharStreams.join(
            newReaderSupplier("<root>"),
            newReaderSupplier(new File("...")),
            newReaderSupplier("</root>"));

    XMLInputFactory xif = XMLInputFactory.newInstance();
    XMLStreamReader xsr = xif.createXMLStreamReader(join.getInput());
    xsr.nextTag();  // Skip the fake root

Так что мой вопрос просто: есть ли способ избежать этого взлома? Какой-нибудь режим 'фрагмента', в который я могу поместить парсер?

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Неа.StAX API не поддерживает фрагменты.A XMLStreamReader подходит только для одного XML-документа.Тем не менее, ваш "хак" совсем не так уж плох ...

1 голос
/ 19 апреля 2016

В соответствии со спецификацией XML, документ XML должен иметь один корневой элемент, иначе он не очень хорошо сформирован. Так что ваш так называемый хак вовсе не хак, это лучший способ исправить документ ....

1 голос
/ 05 апреля 2012

Реализация Woodstox StAX, по-видимому, поддерживает это: http://woodstox.codehaus.org/3.2.9/javadoc/com/ctc/wstx/api/WstxInputProperties.html#P_INPUT_PARSING_MODE

Так получилось, что в некоторых местах мы уже используем Woodstox, но я не думал, что Google выберет опции, относящиеся к Woodstox!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...