解组到Java中的数组或arrayList

时间:2015-05-29 10:08:14

标签: java xml jaxb marshalling unmarshalling

我正在尝试在解组和xml文件之后填充一个arraylist,但是它解组到一个对象,我怎么能把每个单独的项目都复制到像数组一样的其他东西?

我可以编组和解组,但除了记忆的其他内容之外,不能从对象中得到任何东西。

这是unmarshalling

try {

            File file = new File("xmlFiles/ipAdresses.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(IpAdressXmlHandler.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            IpAdressXmlHandler xmlList = (IpAdressXmlHandler) jaxbUnmarshaller.unmarshal(file);
            System.out.println(xmlList);

          } catch (JAXBException e) {
            e.printStackTrace();
          }

如何将xmlList作为数组?或者我如何把一切都拿出来?

IpAdressXmlHandler类:

@XmlRootElement
public class IpAdressXmlHandler {


private String ipAdress;

@XmlElement
public String getIpAdress() {
    return ipAdress;
}


public void setIpAdress(String ipAdress) {
    this.ipAdress = ipAdress;
}

更新:xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ipAdressXmlHandler>
<ipAdress>localhost</ipAdress>
</ipAdressXmlHandler>

以后有多个IP地址,我需要它们在数组或arraylist中

2 个答案:

答案 0 :(得分:2)

public class IpAdressXmlHandler {

@XmlElement(name="ipAdress")
private String ipAdress;

public String getIpAdress() {
    return ipAdress;
}


public void setIpAdress(String ipAdress) {
    this.ipAdress = ipAdress;
}

@XmlRootElement(name="ipAdressXmlHandler")
public class IpAdressListXmlHandler {

@XmlElement(name="ipAdress")
private List<IpAdressXmlHandler> ipAdress;


public List<IpAdressXmlHandler> getIpAdressList() {
    return ipAdress;
}


public void setIpAdressList(List<IpAdressXmlHandler> ipAdress) {
    this.ipAdress = ipAdress;
}

使用IpAdressListXmlHandler类进行解组..

答案 1 :(得分:1)

IpAdressXmlHandler是代表您XML的实体,只要在此XSD的{​​{1}}定义中,只有一个标记允许您永远不会获得XML List 1}}。

<强>解
您的XSD定义必须maxoccurs="otbounded"或类似,以允许各种<IpAdressXmlHandler>标记。完成后,JaxB会自动生成getter,返回List<IpAdressXmlHandler>

<强>更新
IMO我会根据您的xml规范创建一个XSD文件...将其放入您的工作区并Right click > Generate > JaxB classes

如果您想获得List<IpAdressXmlHandler>,则必须为包含List<IpAdressXmlHandler>的xml创建一个包装器并将其返回,但您必须解组包装器,而不是IpAdressXmlHandler

类似的东西:

class IpWrapper{

    private List<IpAdressXmlHandler> ipList;   

    @XmlElement
    public List<IpAdressXmlHandler> getIpAdressXmlHandler() {
        return ipList;
    }
}

JAXBContext jaxbContext = JAXBContext.newInstance(IpWrapper.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();