代码之家  ›  专栏  ›  技术社区  ›  Omar Kooheji

在Java中实现XML的简单方法

  •  28
  • Omar Kooheji  · 技术社区  · 15 年前

    在Java中有简单的读写XML的方法吗?

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

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

    我将研究序列化,但XML必须具有与C语言应用程序的格式相同的格式,我将其应用到Java中进行逆向工程。

    11 回复  |  直到 14 年前
        1
  •  15
  •   grayger    15 年前

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

        2
  •  8
  •   Milhous    15 年前

    你应该退房 Xstream . 有一个2分钟的教程 simple . 为了获得相同的格式,您将对类进行相同的建模。

        3
  •  3
  •   Marko    15 年前

    如果您使用的是JDK 1.4或更高版本,请查看 XMLEncoder 班级。

        4
  •  3
  •   toolkit    15 年前

    一些比较流行的方法可以考虑:

    XML绑定的Java框架

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

    其他绑定方法

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

    翻滚你自己

        5
  •  3
  •   Kyle Dyer    14 年前

    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" );
    
        6
  •  2
  •   Aaron Digulla    15 年前

    目前最简单的方法是 MarkupBuilder 在里面 Groovy . 将Groovy视为Java的一种新语法。这个 XmlSlurper 可用于读取XML。

        7
  •  2
  •   stephendl    15 年前

    我认为 Apache XMLBeans 提供您需要的功能。

    这个 Wikipedia page 提供了一个很好的概述和示例用法。

        8
  •  2
  •   McDowell rahul gupta    15 年前

    从.NET文档中判断,Java的XML处理选项有很大的选择。 XmlDocument , the Java DOM implementation 是最接近开箱即用的等价物。

    .NET XML文档 :

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

    爪哇 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;
    }
    
        9
  •  1
  •   StaxMan    15 年前

    我认为只有当你看错了例子,JAXB才是复杂的。具体来说,是的,基于模式的方法可能会变得混乱。但是代码优先,基于注释是非常简单的。

    另一个简单的选择是 XStream . 对于无约束力的案件, StaxMate ,这是流式stax解析器的附加组件。

        10
  •  0
  •   Kai Huppmann    15 年前

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

        11
  •  0
  •   peter.murray.rust    15 年前

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

    我花了太多的时间试图让W3C DOM工作——在我看来,它的定义很不明确,有太多的方法可以做一些事情,但对其他人来说还不够。当XOM到来时,它彻底改变了我的工作效率。

    XOM社区知识渊博、专注且乐于助人。