在 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中解析XML并忽略标签[重复]

在 Java 中使用 XPath 解析 XML [重复]

读取在java中存储为字符串的xml [重复]

如何在Java(Android)中解析包含XML的字符串[重复]

用于处理无效 XML 的 .NET 解析器 [重复]

XML文件的Java通用解析[重复]