是否有简单的方法在Java中读写Xml?
之前我使用过SAX解析器,但我记得它不直观,我看了几个JAXB的教程,看起来很复杂。
我不知道我是否被C#的XmlDocument类所破坏,但我想要做的就是创建一个Xml文档来表示一组类及其成员(有些是属性,有些是元素)。
我会考虑序列化,但XML必须与c#app的输出具有相同的格式,我将其逆向工程化为Java。
答案 0 :(得分:15)
我建议XOM。它的API清晰直观。
答案 1 :(得分:8)
答案 2 :(得分:3)
如果您使用的是jdk 1.4或更新版本,请查看XMLEncoder类。
答案 3 :(得分:3)
一些比较受欢迎的方法:
JAXB是标准XML绑定的规范。如果您已经有了XSD,它可以为您生成Java类,然后剩下的就是使用标准API进行编组/解组。
与JAXB一样,这些方法使用基于XML的绑定配置。它们可以为解组过程提供更细粒度的控制。
答案 4 :(得分:3)
Dom4j是一个简单的api,用于在java中创建xml文档。
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "root" );
Element author2 = root.addElement( "author" )
.addAttribute( "name", "Toby" )
.addAttribute( "location", "Germany" )
.addText( "Tobias Rademacher" );
答案 5 :(得分:2)
到目前为止,最简单的方法是MarkupBuilder中的Groovy。将Groovy视为Java的新语法。 XmlSlurper可用于读取XML。
答案 6 :(得分:2)
我认为Apache XMLBeans提供了您所追求的功能。
Wikipedia page提供了一个很好的概述和示例用法。
答案 7 :(得分:2)
Java有多种XML处理选项可供选择,但从XmlDocument的.NET文档来看,Java DOM implementation是最接近开箱即用的等价物。
.NET XmlDocument:
此类实现W3C文档 对象模型(DOM)1级核心和 核心DOM级别2。
Java Document:
另请参阅文档对象模型(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;
}
答案 8 :(得分:1)
我认为如果你看错了例子,JAXB就很复杂了。具体来说,是的,基于模式的方式可能会变得混乱。但是代码优先,基于注释的过程非常简单。
答案 9 :(得分:0)
如果SAX解析是强制性的,那么JAXP是一个不错的选择。我更喜欢DOM解析并使用jdom,这对我来说似乎更容易。
答案 10 :(得分:0)
如果你想要类似于SAX的方法,我肯定会使用XOM和SAX(www.sax.org)。我参与了XML的早期开发,SAX是作为事件驱动的方法开发的,这对某些应用程序很有用。 DOM / XOM和SAX是互补的 - 有时您需要一个,有时需要另一个。如果您希望随意构建对象而不是将所有内容都读入内存,请使用SAX。如果您乐意阅读所有内容然后进行处理,请使用XOM。
我花了太多时间试图让W3C DOM工作 - IMO定义很差,有很多方法做某些事情,而对其他事情则不够。当XOM出现时,它彻底改变了我的工作效率。
XOM社区知识渊博,专注且乐于助人。