在Java中解析各种自定义XML文档的最佳方法

10

使用Java解析多个离散的自定义XML文档的最佳方法是什么?


1
展示一下你已经做到了什么程度 - 我们不会替你写代码。你想用DOM、SAX还是其他方式来实现?你已经尝试过哪些方法了?你查看了哪些教程或文档? - mdm
使用Java DOM API或SAX进行XML解析。提供更具体的XML结构。 - 0xAX
试试使用 castor 映射。 - Nikunj
你目前做了什么?你有代码可以展示给我们吗? - Nishan
如果效率是关键,我会使用SAX或者出于个人偏好选择StAX。 - Yaneeve
投票关闭,我链接回去的问题应该包含你所需的一切。 - wds
6个回答

6

我会使用Stax来解析XML,它快速且易于使用。在我的上一个项目中,我使用它来解析高达24MB的XML文件。java.net有一个很好的介绍,告诉你一切需要知道的,让你开始使用。


4
基本上,在Java中有两种主要的XML解析方法:
  • SAX,其中使用处理程序仅获取您在XML中想要的内容并丢弃其余部分
  • DOM,它一直解析您的文件,并允许您以更类似于树形结构的方式获取所有元素。

另一个非常有用的XML解析方法,虽然比这些方法稍微新一些,并且仅在Java6之后的JRE中包含,是StAX。 StAX被构思为DOM的基于树状结构和SAX的基于事件的方法之间的媒介方法。它与SAX非常相似,因为解析非常大的文档很容易,但在这种情况下,应用程序从解析器“拉”信息,而不是解析器将事件“推送”到应用程序。您可以在此处找到有关此主题的更多解释

因此,根据您想要实现的目标,可以使用其中一种方法。


将我的答案复制到重复的线程上,以提供有关各种方法的更多信息。 - Valentin Rocher

3

使用 dom4j

首先阅读文档

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

然后使用XPATH获取您所需的值
public void get_author(Document document) {
    Node node = document.selectSingleNode( "//AppealRequestProcessRequest/author" );
    String author = node.getText();
    return author;
}

3

2

0
以下是使用vtd-xml提取某些值的代码。
import com.ximpleware.*;

public class extractValue{
    public static void  main(String s[]) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false));
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/aa/bb[name='k1']/value");
        int i=0;
        while ((i=ap.evalXPath())!=-1){
            System.out.println(" value ===>"+vn.toString(i));
        }   
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接