在java中查询xml的最快方法
发布时间:2020-12-14 19:35:16 所属栏目:Java 来源:网络整理
导读:参见英文答案 Efficient Parser for large XMLs4个 在java中查询巨大的XML文件的最快方法是什么, DOM – xpath:这需要很多时间, DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilderFactory.setNamespaceAware(t
参见英文答案 >
Efficient Parser for large XMLs4个
在java中查询巨大的XML文件的最快方法是什么, DOM – xpath:这需要很多时间, 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); //this line takes lot of time NodeList result = (NodeList)expr.evaluate(document,XPathConstants.NODESET); 在代码的最后一行,程序在40秒内完成,在1秒内没有它. SAX:我不知道这是否可以用于查询,在互联网上我只能找到解析的例子. 什么是使查询更快的其他选项,我的xml文件的大小约为5MB.日Thnx 解决方法
如果您的id属性的类型为xs:ID,并且您的文档具有XML架构,则可以使用Document.getElementById(String)方法.我将在下面举例说明.
XML Schema <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema" xmlns:tns="http://www.example.org/schema" elementFormDefault="qualified"> <element name="foo"> <complexType> <sequence> <element ref="tns:bar" maxOccurs="unbounded"/> </sequence> </complexType> </element> <element name="bar"> <complexType> <attribute name="id" type="ID"/> </complexType> </element> </schema> XML输入(input.xml) <?xml version="1.0" encoding="UTF-8"?> <foo xmlns="http://www.example.org/schema"> <bar id="ABCD"/> <bar id="EFGH"/> <bar id="IJK"/> </foo> 演示 您需要在DocumentBuilderFactory上设置Schema实例以使一切正常. import java.io.File; import javax.xml.XMLConstants; import javax.xml.parsers.*; import javax.xml.validation.*; import org.w3c.dom.*; public class Demo { public static void main(String[] args) throws Exception { SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = sf.newSchema(new File("src/forum17250259/schema.xsd")); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setSchema(schema); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("src/forum17250259/input.xml")); Element result = document.getElementById("EFGH"); System.out.println(result); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |