[英]Using JAXB annotations, how do you get each XML element of a list wrapped in an element, when each list element has an unknown name?
[英]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.