簡體   English   中英

如何更改jaxb為列表中的每個項目輸出的xml元素名稱

[英]How can I change the xml element name that jaxb outputs for each item in a list

如果我有對象列表

    @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。 我想將它們全部包含在一個列表中,只是讓它輸出我每個需要的三個元素。 有沒有辦法用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封送對象的方式?

不可能。
但是您可以使用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;  
   // ...  
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM