在 Java 中处理 XML [重复]
Posted
技术标签:
【中文标题】在 Java 中处理 XML [重复]【英文标题】:Processing XML in Java [duplicate] 【发布时间】:2011-09-14 00:37:12 【问题描述】:在 java 中处理复杂的 xml 文件的最佳方法是什么?
类似这样的:
<company>
<owner>
<ownername></ownername>
<ownerage></ownerage>
</owner>
<cars>
<car>
<carname></carname>
<engines></engine>
<user>
<name></name>
<age></age>
<address></address>
</user>
</car>
</cars>
</company>
提取汽车或用户的最佳方法是什么?
【问题讨论】:
如果您得到答案,请接受对您帮助最大的答案,以便其他人学习。 【参考方案1】:如果您正在使用 JAXB,那么首先从一些示例数据生成模式会很方便。
另一种方法是使用效率更高但工作量更大的 XStream。
【讨论】:
【参考方案2】:取决于复杂程度。 JAXB 将元素和属性映射到 Java 类和属性。如果 XML 真的很复杂,那会变得很麻烦,因为您最终会得到数千个类,但如果 XML 相对简单,那就非常简洁了。对于许多任务而言,将数据加载到 JDOM 或 XOM 等树模型中,然后使用 XPath 进行查询是最简单的方法。 (在我看来,避免使用 DOM 本身,它有太多的遗产。)
【讨论】:
WRT JAXB,从 XML 模式开始,在 XML 模式中每个复杂类型大约会生成一个 Java 类。从 Java 类开始,您可以使用@XmlElementWrapper
等机制减少类的数量。【参考方案3】:
查看jaxb。我相信它现在是官方的 java xml 序列化库。假设您的 xml 有一个 xsd,jaxb 将根据该模式生成所需的 java 类。从那里您可以相对轻松地在 xml 和 java 对象之间进行来回转换。
要记住的一件事是我总是忘记的术语编组和解组
java objects -> xml = marshalling
xml -> java objects = unmarshalling
【讨论】:
+1 - JAXB (JSR-222) 是用于对象到 XML 映射的 Java 标准。有几种实现:Metro(Java SE 6 中包含的 RI)、EclipseLink MOXy(我是技术主管)、Apache JaxMe 等:bdoughan.blogspot.com/2010/07/jaxb-xml-binding-standard.html 我没有 xsd 架构文件,但我有 dtd 文件。这行得通吗? 是的,但它是实验性的jaxb.java.net/2.1.2/docs/vendorSchemaLangs.html 您不需要 XML 架构,您可以从现有的域模型开始并应用注释来自定义映射到 XML (wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted)。下面是使用带有 DTD 的 JAXB 的另一个示例:bdoughan.blogspot.com/2011/05/jaxb-and-dtd.html【参考方案4】:如果允许您使用其他 JVM 语言,则 Groovy 对 XML 的支持非常好。 http://groovy.codehaus.org/Reading+XML+using+Groovy's+XmlSlurper
否则,这篇文章对整个shebang的介绍还不错:http://java.sun.com/developer/technicalArticles/xml/JavaTechandXML/
【讨论】:
【参考方案5】:Jaxb 是一种非常好的解析 XML 的方法。使用起来相当简单。
您还可以使用XPath 在 XML 中导航。
【讨论】:
【参考方案6】:uhmm 我的建议是你需要在网络上进行一些搜索,查看库和示例来完成你的疑问。可以从dom4jjdom 等等开始。所以你的问题取决于你如何使用图书馆
【讨论】:
以上是关于在 Java 中处理 XML [重复]的主要内容,如果未能解决你的问题,请参考以下文章