329.5. 使用 JAXB 和 StAX 迭代集合


首先,我们假设您具有 JAXB 对象。

例如,包装器对象中的记录列表:

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "records")
public class Records {
    @XmlElement(required = true)
    protected List<Record> record;

    public List<Record> getRecord() {
        if (record == null) {
            record = new ArrayList<Record>();
        }
        return record;
    }
}
Copy to Clipboard Toggle word wrap

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "record", propOrder = { "key", "value" })
public class Record {
    @XmlAttribute(required = true)
    protected String key;

    @XmlAttribute(required = true)
    protected String value;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
Copy to Clipboard Toggle word wrap

然后,您可以获得要处理的 XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<records>
  <record value="v0" key="0"/>
  <record value="v1" key="1"/>
  <record value="v2" key="2"/>
  <record value="v3" key="3"/>
  <record value="v4" key="4"/>
  <record value="v5" key="5"/>
</record>
Copy to Clipboard Toggle word wrap

StAX 组件提供了一个 StAXBuilder,它可在使用 Camel Splitter 迭代 XML 元素时使用

from("file:target/in")
    .split(stax(Record.class)).streaming()
        .to("mock:records");
Copy to Clipboard Toggle word wrap

其中 staxorg.apache.camel.component.stax.StAXBuilder 上的静态方法,您可以在 Java 代码中静态导入。stax 构建器是默认命名空间了解它所使用的 XMLReader。从 Camel 2.11.1 开始,您可以通过将布尔值参数设置为 false 来关闭此,如下所示:

from("file:target/in")
    .split(stax(Record.class, false)).streaming()
        .to("mock:records");
Copy to Clipboard Toggle word wrap

329.5.1. 前面的带有 XML DSL 的示例

上面的示例可以在 XML DSL 中实施

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat