在java中使用xpath查询xml
我试图使用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
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类,将类成员作为标记名,所以这对我来说不起作用。