gpt4 book ai didi

java - 如何将自定义嵌套列表 xml 转换为相应的 java 对象

转载 作者:行者123 更新时间:2023-11-30 05:38:26 25 4
gpt4 key购买 nike

我有以下 XML -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<objectWithList>
<MyList>
<abc>hi</abc>
<list>Somewhere</list>
<list>This and that</list>
<list>Something</list>
</MyList>
</objectWithList>

我想使用 jaxb unmarshaller 将其转换为 java 对象。

用于 xml 映射的 Java 文件 -

@XmlRootElement
public class ObjectWithList {
@XmlElement
private String abc;
private List<String> list;
@XmlElementWrapper(name="MyList")
@XmlElement
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}

}

用于转换的主驱动类代码 -

public class Test {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectWithList.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ObjectWithList emps = (ObjectWithList) jaxbUnmarshaller.unmarshal(new File("c:/emp.xml"));
for (String s : emps.getList()) {
System.out.println(s);
}
System.out.println(" ");
}

}

但这不起作用。我收到以下异常 -

Exception in thread "main" javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId: file:/c:/emp.xml; lineNumber: 1; columnNumber: 10; The processing instruction target matching "[xX][mM][lL]" is not allowed.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:335)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:563)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:249)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)
at com.netspend.idology.Test.main(Test.java:12)
Caused by: org.xml.sax.SAXParseException; systemId: file:/c:/emp.xml; lineNumber: 1; columnNumber: 10; The processing instruction target matching "[xX][mM][lL]" is not allowed.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)

这个问题花了我一整天的时间。非常感谢任何形式的帮助。

最佳答案

请在下面找到有效的修改后的程序。另外你还必须了解类结构的用法以及在适当的地方使用注释。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement
public class ObjectWithList {

private MyList myList;

@XmlElement(name = "MyList")
public MyList getMyList() {
return myList;
}

public void setMyList(MyList myList) {
this.myList = myList;
}

@Override
public String toString() {
return "ObjectWithList{" + "myList=" + myList + '}';
}
}



import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name = "MyList")
public class MyList {

private String abc;

private List<String> list;

@XmlElement(name = "abc")
public String getAbc() {
return abc;
}

public void setAbc(String abc) {
this.abc = abc;
}

@XmlElement(name = "list")
public List<String> getList() {
return list;
}

public void setList(List<String> list) {
this.list = list;
}

@Override
public String toString() {
return "MyList{" + "abc='" + abc + '\'' + ", list=" + list + '}';
}
}



import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;
import java.util.List;

public class Test {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectWithList.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ObjectWithList emps =
(ObjectWithList)
jaxbUnmarshaller.unmarshal(
new File("D:/someFolder/emp.xml"));
for (String s : emps.getMyList().getList()) {
System.out.println(s);
}
System.out.println(emps);
System.out.println(" ");
}
}

关于java - 如何将自定义嵌套列表 xml 转换为相应的 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56173011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com