0

如果我有一个对象列表

    @XmlRootElement(name = "get_item")
    public class GetItem {
       private List<Image> images;
    }

即使我需要为 imgurl、imgcap、imgpurl 创建其他三个类,我几乎可以用 Images 类做任何事情

我想生成如下所示的 xml:

<?xml version=“1.0”?>
<get_item>
 .......snip.......
<imgpurl1>purl 1</imgpurl1>
<imgurl1>url 1</imgurl1>
<imgcap1>caption 1</imgcap1>
<imgpurl2>purl 2</imgpurl2>
<imgurl2>url 2</imgurl2>
<imgcap2>caption 2</imgcap2>
…
<imgpurlN>purl N</imgpurlN>
<imgurlN>url N</imgurlN>
<imgcapN>caption N</imgcapXN>
</get_item>

没有办法知道会有多少 img(s)。我想将它们全部放在一个列表中,然后让它输出我需要的三个元素。有没有办法用 Jaxb 做到这一点?

我尝试与 Eclipses Jaxb 生成器一起使用的模式如下所示:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="get_item">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="xs:string" name="title" />
                <xs:element type="xs:string" name="time" />
                <xs:element type="xs:string" name="date" />
                <xs:sequence>
                    <xs:element type="xs:anyURI" name="imgpurl" minOccurs="0" maxOccurs="unbounded" />
                    <xs:element type="xs:anyURI" name="imgurl" minOccurs="0" maxOccurs="unbounded" />
                    <xs:element type="xs:string" name="imgcap" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我主要关心的是能够像提供的示例一样序列化 xml……最好的方法是什么?有没有办法控制 Jaxb 编组对象的方式?

4

1 回答 1

1

不可能。
但是您可以使用 xml 属性。
输出将是

<imgpurl id="1">purl 1</imgpurl>
<imgurl id="1">url 1</imgurl>
<imgcap id="1">caption 1</imgcap>
<imgpurl  id="2">purl 2</imgpurl>
<imgurl id="2">url 2</imgurl>
<imgcap id="2">caption 2</imgcap>
…
<imgpurl id="N">purl N</imgpurl>
<imgurl id="N">url N</imgurl>
<imgcap id="N">caption N</imgcapX>  

xsd:

 <xs:complexType name="ElementWithAttr">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:integer">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
        <xs:complexType name="SomeName">
           <xs:sequence>
              <xs:element type="xs:string" name="title" />
              <xs:element type="xs:string" name="time" />
              <xs:element type="xs:string" name="date" />
              <xs:sequence>

                   <xs:element type="ElementWithAttr" name="imgurl" minOccurs="0" maxOccurs="unbounded" />
                   <xs:element type="ElementWithAttr" name="imgcap" minOccurs="0" maxOccurs="unbounded" />
              </xs:sequence>
          </xs:sequence>
      </xs:complexType>  

生成的类

    public class ElementWithAttr {

        @XmlValue
        protected String value;
        @XmlAttribute(name = "id")
        protected BigInteger id;  
   // ...  
    }  
    public class SomeName {

       @XmlElement(required = true)
       protected String title;
       @XmlElement(required = true)
       protected String time;
       @XmlElement(required = true)
       protected String date;
       protected List<ElementWithAttr> imgurl;
       protected List<ElementWithAttr> imgcap;  
   // ...  
   }
于 2013-04-14T14:03:52.337 回答