繁体   English   中英

如何使XStream解析来自StAX的部分输入

[英]How to make XStream parse partial input from StAX

我是Stax和XStream的新手。 我正在尝试从庞大的XML流中解组一些常见元素(可能要解组150万到250万个元素)

我试图Stax解析流以获取感兴趣的元素,然后调用xStream取消将XML编组到EndElement。

XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(fis);
            while (reader.hasNext()) {
                if (reader.isStartElement() && reader.getLocalName().toLowerCase().equals("person")) {
                    break;
                }
                reader.next();
            }

            StaxDriver sd = new StaxDriver();
            AbstractPullReader rd = sd.createStaxReader(reader);
            XStream xstream = new XStream(sd);
            xstream.registerConverter(new PersonConverter());
            Person p = (Person) xstream.unmarshal(rd);

我创建一个测试输入<Persons> <Person> <name>A</name> </Person> <Person> <name>B</name> </Person> <Person> <name>C</name> </Person> </Persons>

问题是,首先我的转换器没有被调用。 其次,对于Person中的元素“名称”,我得到CannotResolveClassException,而XStream不会创建我的Person对象。 我在代码中错过了什么?

实例化AbstractPullReader ,它将从流中读取第一个open-element事件,并建立“ root”元素。 因为您已经阅读了第一个Person事件,所以它将前进到下一个事件( name ),它不知道如何解组。

您必须做两件事才能使示例工作:

首先,将元素名称Person命名为Java类的别名

xstream.alias("Person", Person.class);

其次,仅将SAX光标前进到要读取的元素之前的元素:

while (reader.hasNext()) {         
    if (reader.isStartElement() && reader.getLocalName().equals("Persons")) {            
        break;
    }
    reader.next();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM