如何获取 StAX XMLEvent 对象的全文?
How to get the whole text of StAX XMLEvent object?
我正在使用 StAX 迭代器 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>
和税务代码:
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
如何获取XML事件对象的全文?我在这里做错了什么吗?请提出任何其他替代方案。
每个 XML 事件都有 3 个状态
- 开始元素
- 是字符
- 结束元素
例如,如果您需要从您的 xml 文件访问“IGRepeatKey”的数据,然后在状态(开始元素)中,您需要检查 IGData 标签是否已经开始,如果它是真的。启动一个新的迭代器,它将迭代所有标签,即 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() 块中添加此迭代器。
我正在使用 StAX 迭代器 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>
和税务代码:
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
如何获取XML事件对象的全文?我在这里做错了什么吗?请提出任何其他替代方案。
每个 XML 事件都有 3 个状态
- 开始元素
- 是字符
- 结束元素
例如,如果您需要从您的 xml 文件访问“IGRepeatKey”的数据,然后在状态(开始元素)中,您需要检查 IGData 标签是否已经开始,如果它是真的。启动一个新的迭代器,它将迭代所有标签,即 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() 块中添加此迭代器。