326.4. 使用 JAXB 和 StAX 迭代集合


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

例如,在 wrapper 对象中记录列表:

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

326.4.1. 以上使用 XML DSL 的示例

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat