@XmlElementWrapper 不适合我
@XmlElementWrapper isn't working for me
这是我的定义,不检索包装元素中的元素列表:
@XmlElementWrapper(name = "channels")
@XmlElement(name = "channel")
private ArrayList<Channel> expChannels;
public ArrayList<Channel> getChannels() {
return this.expChannels;
}
public void setChannels(ArrayList<Channel> listOfChannels) {
this.expChannels = listOfChannels;
}
这是 Channel 模型对象的声明:
@XmlRootElement
public class Channel {
//Channel() {}
@XmlAttribute(name = "id")
private Integer channelId;
getters/setters
当我从 xml 获取数据时,会检索任何频道。
我已经实现了使用中间 class 频道,将代码更改为:
private Channels expChannels;
@XmlElement(name = "channels")
public Channels getChannels() {
return this.expChannels;
}
public void setChannels(Channels listOfChannels) {
this.expChannels = listOfChannels;
}
并定义频道:
@XmlRootElement(name="channels")
public class Channels {
private List<Channel> expChannels = new ArrayList<Channel>();
@XmlElement(name = "channel")
getters/setters
这是 XML 文件的结构:
<experiment xmlns="experiment">
<name>Test Experiment</name>
<file>ExperimentTemplate.xml</file>
<channels> <!-- List of channel's -->
<channel>
<id>0</id>
<name>Channel 1</name>
<description>Channel 1 description</description>
</channel>
<channel>
<id>1</id>
<name>Channel 2</name>
<description>Channel 1 description</description>
</channel>
</channels>
</experiment>
我可以避免使用频道 class 吗?
@XmlElementWrapper
绝对有效。对于解组问题,最好填充您的对象模型并对其进行编组,并将结果与您正在解组的 XML 进行比较。
我遇到了同样的问题。在您的情况下,您需要将命名空间添加到 XmlWrapper
@XmlElementWrapper(name = "channels", namespace = "experiment")
@XmlElement(name = "channel", namespace = "experiment")
private ArrayList<Channel> expChannels;
我不明白为什么一个单独的@XmlElment 注释不需要命名空间但@XmlElementWrapper 确实需要它,但事实就是如此。
它也适用于包级注释。这样你只需要指定一次命名空间,整个包中的所有@XmlElementWrapper 注释都有效:
@XmlSchema(namespace = "experiment", elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @XmlNs(prefix = "", namespaceURI = "experiment") })
这是我的定义,不检索包装元素中的元素列表:
@XmlElementWrapper(name = "channels")
@XmlElement(name = "channel")
private ArrayList<Channel> expChannels;
public ArrayList<Channel> getChannels() {
return this.expChannels;
}
public void setChannels(ArrayList<Channel> listOfChannels) {
this.expChannels = listOfChannels;
}
这是 Channel 模型对象的声明:
@XmlRootElement
public class Channel {
//Channel() {}
@XmlAttribute(name = "id")
private Integer channelId;
getters/setters
当我从 xml 获取数据时,会检索任何频道。
我已经实现了使用中间 class 频道,将代码更改为:
private Channels expChannels;
@XmlElement(name = "channels")
public Channels getChannels() {
return this.expChannels;
}
public void setChannels(Channels listOfChannels) {
this.expChannels = listOfChannels;
}
并定义频道:
@XmlRootElement(name="channels")
public class Channels {
private List<Channel> expChannels = new ArrayList<Channel>();
@XmlElement(name = "channel")
getters/setters
这是 XML 文件的结构:
<experiment xmlns="experiment">
<name>Test Experiment</name>
<file>ExperimentTemplate.xml</file>
<channels> <!-- List of channel's -->
<channel>
<id>0</id>
<name>Channel 1</name>
<description>Channel 1 description</description>
</channel>
<channel>
<id>1</id>
<name>Channel 2</name>
<description>Channel 1 description</description>
</channel>
</channels>
</experiment>
我可以避免使用频道 class 吗?
@XmlElementWrapper
绝对有效。对于解组问题,最好填充您的对象模型并对其进行编组,并将结果与您正在解组的 XML 进行比较。
我遇到了同样的问题。在您的情况下,您需要将命名空间添加到 XmlWrapper
@XmlElementWrapper(name = "channels", namespace = "experiment")
@XmlElement(name = "channel", namespace = "experiment")
private ArrayList<Channel> expChannels;
我不明白为什么一个单独的@XmlElment 注释不需要命名空间但@XmlElementWrapper 确实需要它,但事实就是如此。
它也适用于包级注释。这样你只需要指定一次命名空间,整个包中的所有@XmlElementWrapper 注释都有效:
@XmlSchema(namespace = "experiment", elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @XmlNs(prefix = "", namespaceURI = "experiment") })