Я использую StAX Iterator api для чтения xml.Как получить весь текст объекта StAX XMLEvent?
XML:
<FormData OID="QUAL">
<IGData IGRepeatKey="1" IGOID="SQUAL" TType="Insert">
<IData Value="0859" IOID="SID"></IData>
<IData Value="DM" IOID="RDOMAIN"></IData>
</IGData>
<IGData IGRepeatKey="1" IGOID="SQUAL" TType="Insert">
<IData Value="0860" IOID="SID"></IData>
<IData Value="2013-01-03T02:00" IOID="QVAL"></IData>
</IGData>
</FormData>
И Stax код:
while(xmlEventReader.hasNext()){
xmlEvent = xmlEventReader.nextEvent();
eventString = xmlEvent.toString();
if(xmlEvent.isStartElement() && eventString.contains("FormData") && eventString.contains("QUAL")){
//do something
}
}
Он работает (eventString имеет весь текст XMLEvent) в моей местной среде.
Но когда я развертываю это на сервере, eventString содержит как «событие Stax # 1». Поэтому, если условие возвращает false.
Я думал, что оба используют различные реализации XMLEvent. Поэтому я проверил его с помощью кода, а jar - в обеих средах: jre1.8.0_73/lib/rt.jar! /javax/xml/stream/events/XMLEvent.class
Как получить весь текст XMLEvent объект? Я делаю что-то неправильно здесь? Пожалуйста, предложите любые другие альтернативы.
В API-интерфейсе Stax нет ничего, что указывало бы, что должна возвращать toString. Поэтому вы никогда не должны кодировать это. Фактическая реализация Stax выбирается во время выполнения в зависимости от многих факторов (система env, порядок загрузчиков классов, которые отличаются JSE et JEE, наличие файлов META-INF ...). Вы можете прочитать это, но не рассчитывайте, что присутствуют только те же самые банки. Вы должны больше узнать о API XMLEvent, следуйте руководству, оно НЕ сделано для того, что вы здесь делаете, например. начиная с заданного узла и распечатывая содержимое этого узла. Это выполнимо, но сложно. – GPI
@GPI, как я могу прочитать содержимое узла? – Hello
@ GPI Почему он работает в локальной среде? любая идея – Hello