2013-06-22 2 views
0

Я пытаюсь сделать несколько запросов на огромный файл XML с помощью XPath в Java, вот мой код:XML-запрос с помощью XPath в Java

  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, который также не работает. Какова альтернатива для ускорения запросов в огромном XML-файле в java?

+0

xpaths using sax !!!!! – NINCOMPOOP

ответ

0

Используйте SAX, а не DOM. Поскольку SAX требует гораздо меньше памяти, чем DOM, поскольку SAX не создает внутреннего представления (древовидной структуры) данных XML, как это делает DOM. Вместо этого SAX просто отправляет данные в приложение по мере чтения; ваше приложение может делать все, что захочет, с данными, которые он видит.

Подробнее см.

http://docs.oracle.com/javase/tutorial/jaxp/sax/index.html

+0

запрос Я использую xpath, который, я думаю, в свою очередь использует DOM, быстрее SAX, чем Xpath? – Naveen

+0

проблема заключается в том, что я пытаюсь написать общее решение для чтения XML-файла, и я могу не знать имена тегов заранее, но структура будет такой же, поэтому я использовал * как регулярное выражение в xpath и в SAX я буду должны определить класс java с членами класса как имена тегов, поэтому это не сработает для меня. – Naveen