java - 如何获取StAX XMLEvent对象的全文?

标签 java xml stax

我正在使用 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 个状态

  1. 起始元素
  2. 是字符
  3. 结束元素

例如,如果您需要从 xml 文件访问“IGRepeatKey”的数据,则在状态(开始元素)中,您需要检查 IGData 标记是否已启动(如果为 true)。启动一个新的迭代器,它将迭代所有标签,即 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() block 中添加此迭代器。

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

相关文章:

java - 如何与包含多个 xml 的输入 xml 文件分开创建多个 xml 文件

c# - 如何在 C# 中使用 XSLT 转换 xml 字符串

java - Stax 解析 - 根据选定的父节点解析子节点

java - 考虑在您的配置中定义 * 类型的 bean

java - API返回不完整的JSON文件

c# - 将 Windows Phone 应用程序移植到 Android

java - Jackson Xml 重复标签名称

java - 使用 StAx 解析 XML 文件时出错

java - 在 java 中读取和写入 xml

java - 使用 double 作为比较对 JSONArray 进行排序违反了约定?