在 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
的实体,只要在这个 XML
的 XSD
定义中只允许一个标签,你就永远不会得到一个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 进行解组..
我试图在解组和 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
的实体,只要在这个 XML
的 XSD
定义中只允许一个标签,你就永远不会得到一个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 进行解组..