在Java中使用Xml的简单方法

是否有简单的方法在Java中读写Xml?

我之前使用过SAX解析器,但我记得它不直观,我看了几个JAXB的教程,看起来很复杂。

我不知道我是否被C#的XmlDocument类所破坏,但我想要做的就是创建一个Xml文档,它代表一组类及其成员(有些是属性,有些是元素)。

我会考虑序列化,但XML必须具有与ac#app的输出相同的格式,我将其逆向工程化为Java。

我推荐XOM 。 它的API清晰直观。

你应该看看Xstream 。 有一个2分钟的教程非常简单 。 要获得相同的格式,您可以对类进行相同的建模。

如果您使用的是jdk 1.4或更新版本,请查看XMLEncoder类。

一些比较流行的方法需要考虑:

用于XML绑定的Java Archictecture

JAXB是标准XML绑定的规范。 如果您已经有了XSD,它可以为您生成Java类,然后剩下的就是使用标准API进行编组/解组。

  • Glassfish的参考实现
  • Apache的实现JaxMe

其他约束方法

与JAXB一样,这些方法使用基于XML的绑定配置。 它们可以为解组过程提供更细粒度的控制。

  • 蓖麻
  • JIBX

滚动你自己

  • 使用StAX
  • 使用XOM
  • 使用普通的XPath

Dom4j是一个用于在java中创建xml文档的简单api。

Document document = DocumentHelper.createDocument(); Element root = document.addElement( "root" ); Element author2 = root.addElement( "author" ) .addAttribute( "name", "Toby" ) .addAttribute( "location", "Germany" ) .addText( "Tobias Rademacher" ); 

到目前为止最简单的方法是Groovy中的MarkupBuilder 。 将Groovy视为Java的新语法。 XmlSlurper可用于读取XML。

我认为Apache XMLBeans提供了您所需的function。

维基百科页面提供了很好的概述和示例用法。

Java的XML处理选项有很多选择,但从XmlDocument的.NET文档来看, Java DOM实现是最接近开箱即用的等价物。

.NET XmlDocument :

此类实现W3C文档对象模型(DOM)1级核心和核心DOM级别2。

Java 文档 :

另请参见文档对象模型(DOM)级别3核心规范。

示例代码:

 public static void main(String[] args) throws Exception { File xmlFile = new File(".classpath"); // read it DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(xmlFile); // walk it System.out.println("Node count=" + countNodes(document)); // write it Source source = new DOMSource(document); Result result = new StreamResult(System.out); TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(source, result); } /** Doesn't count attributes, etc */ private static int countNodes(Node node) { int count = 0; NodeList kids = node.getChildNodes(); count += kids.getLength(); for (int i = 0; i < kids.getLength(); i++) { count += countNodes(kids.item(i)); } return count; } 

我认为如果你看错了例子,JAXB就很复杂了。 具体来说,是的,基于模式的方式可能会变得混乱。 但是代码优先,基于注释的操作非常简单。

另一个简单的替代方案是XStream 。 对于非绑定的情况, StaxMate ,它是流式Stax解析器的附加组件。

如果SAX解析是强制性的,那么JAXP是一个不错的选择。 我更喜欢DOM解析并使用jdom ,这对我来说似乎更容易。

如果你想要一个类似于SAX的方法,我肯定会使用XOM和SAX(www.sax.org)。 我参与了XML的早期开发,SAX是作为事件驱动的方法开发的,对某些应用程序很有用。 DOM / XOM和SAX是互补的 – 有时您需要一个,有时需要另一个。 如果您希望随意构建对象而不是将所有内容都读入内存,请使用SAX。 如果您乐意阅读所有内容然后进行处理,请使用XOM。

我花了太多时间试图让W3C DOM工作 – IMO很难定义太多的方法做某些事情而不是其他人。 当XOM出现时,它彻底改变了我的生产力。

XOM社区非常知识渊博,专注且乐于助人。