簡體   English   中英

JaxB如何將列表的內容編組為單獨的標簽

[英]JaxB How to marshall the content of a list as individual tags

我正在使用JAXB作為編組器。

我有一個包含字符串列表和其他屬性的對象。 我想將列表內容編組為單獨的標簽。

我在代碼List<String> items 如果我將列表中的字符串“ apple”,“ banana”,“ orange”添加到列表中,則在整理結果xml為:

<items>
   <apple/>
   <banana/>
   <orange/>
</items>

這可行嗎? 或者,要獲得該結果,我該如何更改對象?

(抱歉格式化,我不能做得更好)

我的建議

我的建議是不要這樣。 而是讓您的XML消息如下所示(這將使每個人都更容易處理XML):

<items>
   <item>apple</item>
   <item>banana</item>
   <item>orange</item>
</items>

您如何做到

好的,您決定不聽從我的建議:)。 這是您可以執行的操作:

  1. 創建一個XmlAdapter ,它可以將String轉換為名稱等於Stringorg.w3c.dom.Element實例。

     import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.parsers.*; import org.w3c.dom.*; public class StringAdapter extends XmlAdapter<Object, String> { private Document document; @Override public String unmarshal(Object v) throws Exception { Element element = (Element) v; return element.getTagName(); } @Override public Object marshal(String v) throws Exception { return getDocument().createElement(v); } private Document getDocument() throws Exception { if(null == document) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); document = db.newDocument(); } return document; } } 
  2. 注釋你List<String>現場/屬性@XmlJavaTypeAdapter指向您的XmlAdapter@XmlAnyElement注解。

      import java.util.*; import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement public class Items { private List<String> items = new ArrayList<String>(); @XmlAnyElement @XmlJavaTypeAdapter(StringAdapter.class) public List<String> getItems() { return items; } } 
  3. 為了提高性能,請確保您的XmlAdapter擁有Document的實例,並在Marshaller上設置XMLAdapter使其具有狀態,以避免每次調用XmlAdapter都需要重新創建它。

     import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Items.class); Items items = new Items(); items.getItems().add("apple"); items.getItems().add("banana"); items.getItems().add("orange"); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setAdapter(new StringAdapter()); marshaller.marshal(items, System.out); } } 

如何編組 ArrayList<object> [] 在 JAXB 中?<div id="text_translate"><p> 我有一個 ArrayList[] 類型的變量(列表),我想將它保存在 XML 中。 我嘗試了 JAXB,但它只保存了“”字符串(“的重復”等於 list.length)並且在 ArrayLists 中沒有任何項目。如果我嘗試二維數組,它工作正常。如果我嘗試 ArrayList,它也可以正常工作。我怎么解決這個問題?</p><p> 我的代碼類似於:</p><pre> @XmlRootElement public class SomeClass { @XmlElement(name="part") private final ArrayList&lt;Object&gt;[] list; ... constructor, which fills the list variable }</pre><p> 有人可以告訴我該怎么做嗎? 請。<br><br></p></div></object>

[英]How to marshall ArrayList<Object>[] in JAXB?

暫無
暫無

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

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