我是jaxb的新手。我的問題是以下幾點:使用jaxb,是否可以執行從xml文件到java對象的自動映射? 從xml文件開始,是否有東西生成帶註釋jaxb relaitve的Java類?JaxB自動從XML解析爲Java類
回答
是的,JAXB
自動做marshalling
和unmarshalling
但它需要一個模式文件。 JaxB用於將XML與Java對象綁定。使用XSD
模式文件,它可以進行編組和解組。有幾個簡單的ant任務可以使用,比如XJC。
如果要生成Java類,JAXB(JSR-222)實現只需要一個XML模式。如果您從Java類開始,則不需要XML模式。 – 2013-05-06 11:00:04
確實有可能。但是,您需要一個XSD而不是一個XML文件。有一些工具(例如Trang)可以從一個或多個示例XML文件中推斷出XSD。
考慮到如果XML樣本不完整,或者模式無法在單個XML文件(獨佔元素等)中完全表示,則使用工具生成此XSD可能會導致結果不準確。
一旦你有一個XSD,使用xjc
爲了生成編組/解組類。
xjc myxsd.xsd
這將產生註解類,JAXB將用於編組/解組。注意你也可以自己編寫這些類。一旦你有他們,只需在你的代碼中使用它們:
File file = new File("myFile.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(MyRootElement.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyRootElement element = (MyRootElement) jaxbUnmarshaller.unmarshal(file);
感謝您的回答,但我有另一個問題。雖然做xjc myxsd.xsd我有這個異常: java.lang.IllegalArgumentException:非法模式字符'g' 這是什麼意思? – 2013-05-06 12:59:24
似乎有一個[相關的錯誤](https://java.net/jira/browse/JAXB-915?page=com.atlassian.streams.streams-jira-plugin%3Aactivity-stream-issue-tab)與JAXB 2.2.6並特別影響意大利語區域。它似乎是在2.2.7中修復的。您可能也會發現這個問題很有用:[無法使用JAXB生成類](http://stackoverflow.com/q/10757211/851811)。 – 2013-05-06 13:25:37
- 1. 使用JAXB解析java的XML
- 2. JAXB XML解析問題
- 3. 防止在JAXB XML解析
- 4. 使用jaxb將複雜的xml解析爲java
- 5. 如何使用JAXB將/強調的XML解析爲camelcased Java?
- 6. Java的JAXB XML POJO類
- 7. XML解析和自動化
- 8. Marshall /將一個JSON解析爲使用JAXB的Java類
- 9. JAVA - 解析XML
- 10. JAVA,Xml解析
- 11. Java XML解析
- 12. Java XML解析
- 13. java,xml解析
- 14. Oracle XML解析與Java XML解析
- 15. 使用JAXB解析響應XML
- 16. 使用JAXB根據屬性解析xml
- 17. 使用JAXB解析XML字符串
- 18. JAXB中的Xml解析問題
- 19. 如何使用JAXB解析此xml
- 20. 將xml數據從一個xml解析爲Java中的新xml
- 21. xml解析+ Java ME
- 22. Java和解析XML
- 23. JAVA DOM XML解析
- 24. Java的XML解析
- 25. 將接口自動解析爲Java上的具體類
- 26. Java的XML解組使用JAXB
- 27. JAXB過濾解析
- 28. Java SAX:動態解析XML文件
- 29. 解析XML Last.Fm從API在Java中
- 30. 從API供稿解析XML(Java)
你需要一個XSD,而不僅僅是XML。看看['xjc'](http://docs.oracle.com/javase/6/docs/technotes/tools/share/xjc.html)。 – 2013-05-06 10:32:41
如何生成一個xsd文件?你可以自動做到這一點? – 2013-05-06 10:43:16
可以從許多示例XML中推斷出XSD。看[我的回答](http://stackoverflow.com/a/16397009/851811)。但是,擁有真正的XSD可能會更安全,或者如果您瞭解結構,可以自己設計它。 – 2013-05-06 10:44:53