我是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解析問題
- 5. 使用JAXB解析XML
- 6. 防止在JAXB XML解析
- 7. 使用jaxb將複雜的xml解析爲java
- 8. 使用JAXB將XML解析爲java變量(bean)
- 9. 如何使用JAXB將/強調的XML解析爲camelcased Java?
- 10. XML解析器與從Java
- 11. 從網站解析xml Java
- 12. Java的JAXB XML POJO類
- 13. XML解析和自動化
- 14. Marshall /將一個JSON解析爲使用JAXB的Java類
- 15. Java XML解析
- 16. JAVA - 解析XML
- 17. java,xml解析
- 18. Java XML解析
- 19. XML解析/ JAVA
- 20. JAVA,Xml解析
- 21. Oracle XML解析與Java XML解析
- 22. 將xml數據從一個xml解析爲Java中的新xml
- 23. 使用JaxB解析XML的空響應
- 24. 使用JAXB解析未知Xml
- 25. 解析XML使用XPath來JAXB
- 26. 使用JAXB根據屬性解析xml
- 27. JAXB中的Xml解析問題
- 28. 使用JAXB進行XML解析
- 29. 使用jaxb的XML解析器
- 30. 使用JAXB解析XML字符串
你需要一個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