在 Java 中解组为数组或数组列表

Unmarshalling to an array or arrayList in Java

我试图在解组和 xml 文件后填充一个数组列表,但它解组为一个对象,我怎样才能取出每个单独的项目并复制到其他东西,比如数组?

我可以编组和解组,但除了一些内存地址等之外无法从对象中得到任何东西。

这里是解组

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();
          }

如何获取 xml列表作为数组?或者我怎样才能把所有东西都拿出来?

IpAdressXmlHandler class:

@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地址,我需要它们在一个数组或数组列表中

IpAdressXmlHandler 是代表你的 XML 的实体,只要在这个 XMLXSD 定义中只允许一个标签,你就永远不会得到一个List

解决方案
您的 XSD 定义必须具有 maxoccurs="otbounded" 或类似的定义以允许各种 <IpAdressXmlHandler> 标签。一旦完成,JaxB 将自动生成 getter 返回 List<IpAdressXmlHandler>.

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

如果你想得到一个 List<IpAdressXmlHandler> 你必须为你的 xml 创建一个包含 List<IpAdressXmlHandler> 和 returns 的包装器,但是你必须 解组包装器,而不是 IpAdressXmlHandler.

类似于:

class IpWrapper{

    private List<IpAdressXmlHandler> ipList;   

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

并且:

JAXBContext jaxbContext = JAXBContext.newInstance(IpWrapper.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
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 class 进行解组..