Castor:如何映射一个简单的字符串列表?

时间:2010-04-08 08:58:14

标签: java xml castor

我班上有以下字段:

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>

感谢任何帮助!

3 个答案:

答案 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"