在java中使用xpath查询xml

在java中使用xpath查询xml,java,xml,dom,xml-parsing,Java,Xml,Dom,Xml Parsing,我试图使用java中的xpath对巨大的XML文件进行一些查询,下面是我的代码: DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilderFactory.setNamespaceAware(true); DocumentBuilder docBuilder = docBuilderFactory.newDocumen

我试图使用java中的xpath对巨大的XML文件进行一些查询,下面是我的代码:

         DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
         docBuilderFactory.setNamespaceAware(true);

         DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
         Document document = docBuilder.parse(new File("test.xml"));

         XPath xpath = XPathFactory.newInstance().newXPath();

         String xPath = "/*/*[@id='ABCD']/*/*";

         XPathExpression expr = xpath.compile(xPath);
         NodeList result = (NodeList)expr.evaluate(document, XPathConstants.NODESET);
代码的最后一行花费了很多时间,我不知道为什么,虽然这一行程序在1秒内完成,但在40秒内完成。 我还尝试了XOM,但它也不起作用。
用java在一个巨大的XML文件中进行更快查询的替代方法是什么?

使用SAX,而不是DOM。因为SAX需要的内存比DOM少得多,因为SAX不像DOM那样构造XML数据的内部表示(树结构)。相反,SAX只是在读取数据时向应用程序发送数据;然后,应用程序可以对它看到的数据执行任何它想执行的操作

详情请阅读


xpath使用sax!!!!!要查询,我使用的是xpath,而我认为xpath反过来又使用DOM,SAX比xpath快吗?问题是我正在尝试编写一个读取XML文件的通用解决方案,我可能事先不知道标记名,但结构是相同的,这就是为什么我在xpath中使用*作为正则表达式,在SAX中,我必须定义一个java类,将类成员作为标记名,所以这对我来说不起作用。