我正在使用StAX Iterator api读取xml。

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 Event#1”。因此,如果条件返回false。

我以为两者都使用不同的XMLEvent实现。所以我通过代码检查了它,并且两种环境中的jar都是相同的:jre1.8.0_73 / lib / rt.jar!/javax/xml/stream/events/XMLEvent.class

如何获取XMLEvent对象的整个文本?我在这里做错什么了吗?请提出其他选择。

最佳答案

每个XML事件都有3个状态


起始元素
是字符
结束元素


例如,如果您需要从xml文件访问“ IGRepeatKey”的数据,然后在状态(“开始元素”)下,则需要检查IGData标签是否已启动(如果为true)。启动一个新的Iterator,它将迭代所有标记,即IGRepeatKey,IGOID,TType。

尝试这样的事情

Iterator<Attribute> iterator = element.getAttributes();
while (iterator.hasNext())
{
  Attribute attribute = (Attribute)iterator.next();
  QName name = attribute.getName();
  String value = attribute.getValue();
  System.out.println(name+" + "+value);
}


在xml.isStartElement()块中添加此迭代器。

关于java - 如何获取StAX XMLEvent对象的整个文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40770963/

10-12 04:52