我班上有以下字段:
private List<String> messages;
这是我的映射:
<field name="messages" collection="arraylist" type="string" container="false>
<bind-xml name="errors" node="element"/>
</field>
这是我编组的结果:
<errors><string>message1</string><string>message2</string></errors>
这就是我想要实现的目标:
<errors><error>message1</error><error>message2</error></errors>
感谢任何帮助!
答案 0 :(得分:2)
您是否有任何理由使用编组来实现这一目标?它将有一套定义XML输出的方法,以便它知道如何在解组时重新创建对象。因此,如果你真的想要使用编组的XML输出,我认为你需要创建一个名为Error的新类型,你的列表将是:
private List<Error> messages;
映射:
<field name="messages" collection="arraylist" type="error" container="false>
<bind-xml name="errors" node="element"/>
</field>
或者,如果您只是想创建xml输出,并且您的内容真的像上面给出的那样简单,那么您可以编写一个toXml()方法,该方法遍历列表,完全按照您的需要添加内容。反转可以使用fromXml()方法完成,该方法使用DOM或SAX解析XML并重建字符串列表。
答案 1 :(得分:1)
为什么不使用JAXB?
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Errors {
private List<String> messages;
@XmlElement(name="error")
public List<String> getMessages() {
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}
}
如果您喜欢外部绑定文件,可以使用EclipseLink JAXB (MOXy):
<?xml version="1.0" encoding="UTF-8"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
<java-types>
<java-type name="Errors">
<xml-root-element/>
<java-attributes>
<xml-element java-attribute="messages" name="error"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
答案 2 :(得分:0)
我知道这是很久以前的问题,但你可能想考虑使用container="true"
。