java - 处理 JAXB 集合

标签 java jaxb

我正在尝试使用 JAXB 解码以下 XML:

<Works>
    <Work>
        <Composers>
            <Composer>
                <Name>A name</Name>
            </Composer>
            <Composer>
                <Name>A name 2</Name>
            </Composer>
        </Composers>
    </Work>
</Works>

我已经使用 XJC 生成了所有类。如果我想访问 Composers 集合,我必须这样做:

 List<Composer> composers = work.getComposers().getComposer();

有什么方法可以改为执行以下操作吗?

 List<Composer> composers = work.getComposers();

我明白需要一个 Composers 对象,因为它派生自 XML,但是在处理 Java 时,拥有一个存储集合的中间 POJO 似乎有点多余。

我的 XSD 是:

<xsd:complexType name="Works">
    <xsd:sequence>
        <xsd:element name="Work" type="Work" maxOccurs="unbounded" minOccurs="0"></xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="Work">
    <xsd:sequence>
        <xsd:element name="Composers" type="Composers"></xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="Composers">
    <xsd:sequence>
        <xsd:element name="Composer" type="Composer" maxOccurs="unbounded" minOccurs="0"></xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="Composer">
    <xsd:sequence>
        <xsd:element name="Name" type="xsd:string"></xsd:element>
    </xsd:sequence>
</xsd:complexType>

最佳答案

@XmlElementWrapper 插件完全符合您的要求。

关于java - 处理 JAXB 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338245/

相关文章:

java - 应该如何维护序列化对象?

java - 使用 woodstox 和本地 dtd 验证和解析 xml

使用 Marshaller 的 Matlab 中的 Java/JAXB/JAK 错误

java - 查找子字符串出现的总数

java - 使用 Jackson 将 JSON 数组反序列化为单个 Java 对象

java - 什么时候应该使用 InputStreamReader 和 OutputStreamWriter?

java - 是否可以将 CORS header 添加到 Tomcat 容器中来自 j_security_check 的响应

java - 定义package时为目标命名空间定义了多个<schemaBindings>

java - 使用扩展类时不调用 JAXB afterUnmarshall

java - 使用 JAXB 剪切 XML