用Java编写Xml的简单方法

用Java编写Xml的简单方法,java,xml,serialization,Java,Xml,Serialization,有没有简单的方法可以在Java中读写Xml 我以前使用过SAX解析器,但我记得它是不直观的,我看过一些JAXB教程,它看起来很复杂 我不知道我是否被C#的XmlDocument类宠坏了,但我只想创建一个Xml文档,它表示一组类及其成员(有些是属性,有些是元素) 我会研究序列化,但XML必须具有与c应用程序输出相同的格式,我正在将其反向工程为Java。您应该检查一下。这里有一个2分钟的教程,非常有趣。要获得相同的格式,您需要对相同的类进行建模。如果您使用的是JDK1.4或更新版本,请查看类。如果S

有没有简单的方法可以在Java中读写Xml

我以前使用过SAX解析器,但我记得它是不直观的,我看过一些JAXB教程,它看起来很复杂

我不知道我是否被C#的XmlDocument类宠坏了,但我只想创建一个Xml文档,它表示一组类及其成员(有些是属性,有些是元素)


我会研究序列化,但XML必须具有与c应用程序输出相同的格式,我正在将其反向工程为Java。

您应该检查一下。这里有一个2分钟的教程,非常有趣。要获得相同的格式,您需要对相同的类进行建模。

如果您使用的是JDK1.4或更新版本,请查看类。

如果SAX解析是必需的,JAXP是一个不错的选择。我更喜欢DOM解析和使用,这对我来说似乎容易得多。

到目前为止,最简单的方法是in。将Groovy看作是Java的一种新语法。可以使用来读取XML。

我认为这提供了您想要的功能


提供了很好的概述和示例用法。

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

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

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

  • 来自的参考实现
  • Apache的实现
其他有约束力的办法 与JAXB一样,这些方法使用基于XML的绑定配置。它们可以对解组过程提供更细粒度的控制

滚你自己的
  • 使用
  • 使用
  • 使用普通

Java有很多XML处理选项可供选择,尽管从的.NET文档判断,是最接近的现成等价物

.NET:

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

爪哇:

另请参见文档对象模型(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;
}
publicstaticvoidmain(字符串[]args)引发异常{
File xmlFile=新文件(“.classpath”);
//读一下
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
Document=builder.parse(xmlFile);
//走吧
System.out.println(“节点计数=”+countNodes(文档));
//写下来
Source Source=新的DOMSource(文档);
结果结果=新的StreamResult(系统输出);
TransformerFactory TransformerFactory=TransformerFactory
.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
变换(源、结果);
}
/**不计算属性等*/
私有静态int countNodes(节点节点){
整数计数=0;
NodeList kids=node.getChildNodes();
count+=kids.getLength();
for(int i=0;i
是一个用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" );

我认为JAXB只有在看到错误的示例时才会变得复杂。具体来说,是的,基于模式的方法可能会变得混乱。但首先,基于代码的注释非常简单


另一个简单的选择是。对于非绑定情况,它是流式Stax解析器的附加组件。

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

我花了太多的时间试图让W3CDOM正常工作——在我看来,它的定义很糟糕,有些事情有太多的处理方法,而其他事情则不够。XOM的出现彻底改变了我的生产力


XOM社区知识渊博,关注焦点明确,乐于助人。

请注意:XStream没有正确处理名称空间。请注意,如果海报没有名称空间问题。我喜欢XStream。。。很容易使用。当您需要将对象保存为xml并读回时,非常适合快速作业。另请参见:XOM ftw。在大多数情况下,它比DOM或SAX简单得多。为了处理一个巨大的文档,我只需要突破XOM并使用SAX一次。不久前,我对dom4j的答案投了赞成票,但在测试了XOM之后,我开始同意这一点。要了解为什么XOM可能比dom4j(或JDOM)更好,请查看我正在努力使用XOM,这对我来说并不直观。链接现在转到一个无关的网站。改为点击这里:+1获取一个开箱即用的程序,无需安装任何东西。