Саксонский медленный разбор - PullRequest
1 голос
/ 12 февраля 2012

Я пытаюсь проанализировать xml с помощью saxon, чтобы сделать запрос к xpath, но у меня возникли 2 проблемы: во-первых, saxon очень долго строит очень короткий документ в xhtml. код такой:

Processor processorInstance = new Processor(false);
    processorInstance.setConfigurationProperty(FeatureKeys.DTD_VALIDATION, false);


    XPathCompiler XPathCompilerInstance = processorInstance.newXPathCompiler();
    XPathCompilerInstance.setBackwardsCompatible(false);

    String expressionTitre = "//div[@class='score_global']/preceding-sibling::img[1]";

    XPathExecutable XPathExecutableInstance = XPathCompilerInstance.compile(expressionTitre);
    XPathSelector selector = XPathExecutableInstance.load();
    logger.info("Xpath compiled.");

    // Phase 2, load xml document.
    DocumentBuilder documentBuilderInstance = processorInstance.newDocumentBuilder();
    documentBuilderInstance.setSchemaValidator(null);
    documentBuilderInstance.setLineNumbering(false);
    documentBuilderInstance.setRetainPSVI(false);


    XdmNode context = documentBuilderInstance.build(new File("sample/sample.xml")); // This line takes ages to return.

Что я не понимаю, так это то, что если я делаю это с SAX, он загружается с нормальной скоростью :(. Что я забыл предоставить в саксонии?

Java 1.6 Саксонская 9.1.0.8

Вторая проблема заключается в том, что он не может обработать символы с ударением, в то время как мой xml был такой:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Итак, я удалил атрибуты xml: lang en lang =, но не повезло: (

У вас есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Что ж, после долгих чтений, было просто необходимо определить CatalogResolver и загрузить локально Xhtml dtds. Я бросил saxon и использовал вместо этого простой JaxP / SaxReader.

Эта страница http://xml.apache.org/commons/components/resolver/resolver-article.html оказалась очень интересной.

Надеюсь, что эти соображения окажутся кому-то полезными :)

1 голос
/ 14 февраля 2012

Хорошо, я обнаружил, что, хотя я настроил Саксона не проверять, он тем не менее попытался разрешить URI и не смог найти его локально, поэтому он подключился к сети и получил 503 от W3c, что занимает много времени возвращать. Я удалил объявление DTD в моем xml, и это сработало. Мой следующий шаг - остановить его, чтобы попытаться решить. В настоящее время я читаю саксонский док и играю с распознавателем сущностей, и все должно быть в порядке.

...