JAXB 解组包装列表
JAXB unmarshal wrapped list
是否可以在 JAXB 中直接将包装元素列表解组为 List<String>
?
例如我有一个 XML 比如:
<TEST>
<MIME_INFO>
<MIME>
<MIME_SOURCE>foo.png</MIME_SOURCE>
<MIME_PURPOSE>normal</MIME_PURPOSE>
</MIME>
<MIME>
<MIME_SOURCE>bar.png</MIME_SOURCE>
<MIME_PURPOSE>normal</MIME_PURPOSE>
</MIME>
</MIME_INFO>
</TEST>
那么是否可以直接将此 XML 文件解组为仅包含 { "foo.png", "bar.png" } 的 List<String>
?
我知道您可以创建一个带有正确注释的 class 层次结构来执行此解组,但我想要这样的代码:
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "TEST")
@XmlAccessorType (XmlAccessType.FIELD)
public class Info {
// -> what annotation to put here?
private List<String> infos;
public List<String> getInfos() {
return infos;
}
}
和主文件:
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class UnmarshallingJAXB {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(Info.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Info info = (Info) jaxbUnmarshaller.unmarshal(new File("test.xml"));
// should output foo.png and bar.png
info.getInfos().forEach(System.out::println);
}
}
有什么办法吗?
很抱歉回答这么晚,但如果搜索相关问题,这是 Google 的第一篇文章,所以无论如何它可能会有帮助。
是的,有可能,使用
@XmlElementWrapper
组合
@XmlElement
有关详细信息,请参阅 this example。
是否可以在 JAXB 中直接将包装元素列表解组为 List<String>
?
例如我有一个 XML 比如:
<TEST>
<MIME_INFO>
<MIME>
<MIME_SOURCE>foo.png</MIME_SOURCE>
<MIME_PURPOSE>normal</MIME_PURPOSE>
</MIME>
<MIME>
<MIME_SOURCE>bar.png</MIME_SOURCE>
<MIME_PURPOSE>normal</MIME_PURPOSE>
</MIME>
</MIME_INFO>
</TEST>
那么是否可以直接将此 XML 文件解组为仅包含 { "foo.png", "bar.png" } 的 List<String>
?
我知道您可以创建一个带有正确注释的 class 层次结构来执行此解组,但我想要这样的代码:
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "TEST")
@XmlAccessorType (XmlAccessType.FIELD)
public class Info {
// -> what annotation to put here?
private List<String> infos;
public List<String> getInfos() {
return infos;
}
}
和主文件:
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class UnmarshallingJAXB {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(Info.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Info info = (Info) jaxbUnmarshaller.unmarshal(new File("test.xml"));
// should output foo.png and bar.png
info.getInfos().forEach(System.out::println);
}
}
有什么办法吗?
很抱歉回答这么晚,但如果搜索相关问题,这是 Google 的第一篇文章,所以无论如何它可能会有帮助。
是的,有可能,使用
@XmlElementWrapper
组合
@XmlElement
有关详细信息,请参阅 this example。