2

我的班级中有以下领域:

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>

任何帮助表示赞赏!

4

3 回答 3

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 并重建字符串列表。

于 2010-04-08T09:44:17.033 回答
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>
于 2010-07-09T20:50:52.420 回答
0

我知道这是很久以前问过的,但您可能要考虑使用container="true".

于 2017-03-04T01:27:36.540 回答