我需要創建一些xml以下面的格式發送到另一個應用程序,我試圖使用jaxb。總是隻有一次出現吧。有沒有辦法做到這一點,或者它是無效的XML,因爲它有2個根元素和其他應用程序將需要改變它如何接受XML?關於根元素的Jaxb問題
<FOO>
<BAR>
<id>1</id>
<POINTS>111</POINTS>
<CODE>123</CODE>
</BAR>
</FOO>
我需要創建一些xml以下面的格式發送到另一個應用程序,我試圖使用jaxb。總是隻有一次出現吧。有沒有辦法做到這一點,或者它是無效的XML,因爲它有2個根元素和其他應用程序將需要改變它如何接受XML?關於根元素的Jaxb問題
<FOO>
<BAR>
<id>1</id>
<POINTS>111</POINTS>
<CODE>123</CODE>
</BAR>
</FOO>
下面是幾個方法:
標準JAXB
下面將與任何JAXB實現(地鐵,MOXy,JaxMe等)工作。您可以創建元素「FOO」,然後將Bar的實例編入其中。下面如何證明這種使用StAX的代碼(也有可能是與DOM和SAX完成):
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
public class Demo {
public static void main(String[] args) throws Exception {
XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
xsw.writeStartDocument();
xsw.writeStartElement("FOO");
Bar bar = new Bar();
bar.setId(1);
bar.setPoints(111);
bar.setCode(123);
JAXBContext jc = JAXBContext.newInstance(Bar.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(bar, xsw);
xsw.writeEndElement();
xsw.writeEndDocument();
xsw.close();
}
}
的EclipseLink JAXB(莫西)
如果你碰巧使用EclipseLink JAXB (MOXy),那麼你就可以使用@XmlPath擴展名(我是MOXy技術領導者)。你的酒吧類會是什麼樣子:
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="FOO")
@XmlType(propOrder={"id", "points", "code"})
public class Bar {
private int id;
private int points;
private int code;
@XmlPath("BAR/id/text()")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlPath("BAR/POINTS/text()")
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
@XmlPath("BAR/CODE/text()")
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
欲瞭解更多信息,請參閱:
我使用第一個代碼示例正確地獲得了正確的xml格式,現在我只需要弄清楚如何將XMLStreamWriter與我預期的xml進行比較,以便我的測試通過。謝謝您的幫助! – Scott 2011-03-28 19:38:48
@Scott - 沒問題,如果這回答了您的問題,請考慮將其標記爲接受的答案。這標記給其他用戶,你已經找到了你正在尋找的答案。 – 2011-03-28 19:47:43
這是完全有效的。你有什麼問題? – skaffman 2011-03-28 18:49:01
對,它沒有2個根(是根元素)。但是對於JAXB,如果有屬性「BAR」沒有列表,那麼JAXB將無法弄清楚如何使用這樣的XML。 –
StaxMan
2011-03-28 18:58:40
根據我的規格,這是我應該發送的確切的XML,我無法找到一種方法來獲取XML在酒吧。條形圖中只有1個元素出現。 – Scott 2011-03-28 19:02:31