我是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