使用嵌套的相同根解组XML

时间:2014-10-09 14:25:57

标签: jaxb annotations marshalling unmarshalling

我真的需要你的帮助。我有这个XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transaction xmlns="http://www.w3schools.com" transactionName="KYGGT003" application="KYGG" version="01" country="ES" language="EN" type="S" enable="1" pre_event="0" pre_log="0"post_channel="0" post_event="0" post_event_functional="0" post_journal="0" post_log="0" post_rop="0" synchronizedJournal="0" priority="0" timeout="30000" jpa="true">
  <paramsIn>
    <parameter order="1" name="BANK-CODE" type="String" size="4"mandatory="1" />
    <parameter order="2" name="COUNTRY-CODE" type="String" size="2"mandatory="1" />
  </paramsIn>
  <paramsOut>
    <parameter order="9" name="ENTRY-BRANCH-CODE" type="String"size="4" mandatory="0" />
    <parameter order="10" name="ENTRY-EMPLOYEE-USER-CODE" type="String"size="8" mandatory="0" />
    <parameter order="11" name="ENTRY-EMPLOYEE-CODE" type="String"size="20" mandatory="0" />
    <group name="AUTHENTICATION-TYPE" order="12">
      <parameter order="1" name="AUTHENTICATION-TYPE- CODE" type="String" size="2" mandatory="0" />
      <group name="USERS" order="2">
        <parameter order="1" name="USER" type="String" size="80" mandatory="0" />
        <group name="PASS" order="3">
          <parameter order="1" name="PASS" type="String" size="80" mandatory="0"/>
        </group>
      </group>
    </group>
  </paramsOut>
  <description>-</description>
</transaction>

这是我的GroupType:

的java
@XmlRootElement(name = "group")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "",  propOrder = {"parameter","group"})
public class GroupType {

    @XmlElement(required = true)
    protected List<ParamType> parameter;
    @XmlElement(name = "group", required=true)
    protected List<GroupType> group;
    @XmlAttribute
    protected String name;
    @XmlAttribute
    protected String order;

    public List<ParamType> getParameter() {
        if (parameter == null) {
            parameter = new ArrayList<ParamType>();
        }
        return this.parameter;
    }

    public String getName() {
        return name;
    }

    public void setName(String value) {
        this.name = value;
    }

    public String getOrder() {
        return order;
    }

    public void setOrder(String value) {
        this.order = value;
    }

    public List<GroupType> getGroup() {
        if (group == null) {
            group = new ArrayList<GroupType>();
        }
        return this.group;
    }
}

如何将嵌套组添加到GroupType对象中?我已经尝试了很长时间,测试了几种可能性,但我没有找到解决方案。

你会帮我吗?

提前谢谢你, 问候。巴勃罗。

1 个答案:

答案 0 :(得分:0)

你有什么应该工作。以下是我尝试的方法。

Java模型

<强> GroupType.java

与你的问题相同。

<强> package-info.java

您需要确保正确映射您的命名空间。如果您的软件包是com.example,那么您需要以下package-info类。

@XmlSchema(
        namespace = "http://www.w3schools.com",
        elementFormDefault = XmlNsForm.QUALIFIED)
package com.example;

import javax.xml.bind.annotation.*;

演示代码

<强> input.xml中

以下是您的问题中与您尝试解组的GroupType类对应的XML文档的一部分。注意我将问题中文档根元素的xmlns声明添加到新的根元素group

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group name="AUTHENTICATION-TYPE" order="12" xmlns="http://www.w3schools.com" >
    <parameter order="1" name="AUTHENTICATION-TYPE- CODE" type="String" size="2" mandatory="0" />
    <group name="USERS" order="2">
        <parameter order="1" name="USER" type="String" size="80" mandatory="0" />
        <group name="PASS" order="3">
            <parameter order="1" name="PASS" type="String" size="80" mandatory="0"/>
        </group>
    </group>
</group>

<强>演示

下面是一些代码,它们将XML解组为对象,然后将其编组回XML。

import javax.xml.bind.*;
import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(GroupType.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("input.xml");
        GroupType group = (GroupType) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(group, System.out);
    }

}

<强>输出

以下是运行演示代码的输出。请注意parameter元素为空,因为我没有在模型重新创建中映射任何属性。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group xmlns="http://www.w3schools.com" name="AUTHENTICATION-TYPE" order="12">
    <parameter/>
    <group name="USERS" order="2">
        <parameter/>
        <group name="PASS" order="3">
            <parameter/>
        </group>
    </group>
</group>