Допускает ли VTD-XML сложные выражения xpath?

Я использовал VTD-XML для выполнения выражений xpath, но обнаружил, что любое выражение XPath, более сложное, чем использование адреса типа файла (например, // Книги / авторы), не работает и просто возвращает весь файл.

У меня есть два примера: один с использованием метода concat (), другой с использованием метода contains ().

Мой документ test.xml:

<a>
  <b>The</b>
  <c>fox</c>
  <d>
    <e>jumps</e>
  </d>
</a>

Первый выпуск

У меня проблема при выполнении такой конкатенации:

concat(//b, ' ', //c, ' ', '- Found: ', \"'\", //d/e, \"'\")

Это должно вернуться:

The fox - Found: 'jumps'

но вместо этого возвращает:

Thefoxjumps Thefoxjumps - Found: 'Thefoxjumps'

VTD используется для первого выпуска

File f = new File("C:/Users/../test.xml");
FileInputStream fis = new FileInputStream(f);
byte[] b = new byte[(int) f.length()];
fis.read(b);

VTDGen vg = new VTDGen();
vg.setDoc(b);
vg.parse(true);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("concat(//b, ' ', //c, ' ', '- Found: ', \"'\", //d/e, \"'\")");

System.out.println(ap.evalXPathToString());

Второй выпуск

Когда я запускаю такой контейнер:

//a[contains('|jumps|runs|', d/e)]

Это должно вернуть тег «a», так как есть тег «e», содержащий «прыжки». Но вместо этого ничего не возвращает.

Код VTD, использованный для второго выпуска

File f = new File("C:/Users/../test.xml");
FileInputStream fis = new FileInputStream(f);
byte[] b = new byte[(int) f.length()];
fis.read(b);

VTDGen vg = new VTDGen();
vg.setDoc(b);
vg.parse(true);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
int r;
while((r = ap.evalXPath()) != -1){
    System.out.println("Tag: "+vn.toString(r));
}

person Marco    schedule 03.06.2016    source источник
comment
пожалуйста, скачайте последний файл jar, когда он будет выпущен ... что очень скоро ..   -  person vtd-xml-author    schedule 06.06.2016
comment
Я добавил банку в свой проект, но она по-прежнему дает тот же результат. Я даже попытался переименовать банку в 2.12, чтобы она имела то же имя, что и папка, в которой она находится, но ничего не изменилось. Тем не менее, спасибо за предложения parseFile, он намного чище.   -  person Marco    schedule 06.06.2016
comment
Я думаю, у вас, вероятно, проблема с настройкой глобального пути к классам ... ваш код отлично работает в моей среде eclipse ... вы запускаете его в eclipse или в командной строке?   -  person vtd-xml-author    schedule 06.06.2016
comment
Я запускаю его на Eclipse Mars   -  person Marco    schedule 06.06.2016
comment
поэтому я установил путь к классам таким образом; установить classpath = C: \ Users \ myusername \ Desktop \ ximpleware-2.12-java \ vtd-xml.jar; C: \ Users \ myusername \ Desktop \ ximpleware-2.12-java \ vtd-xml_2.13.jar;.; Затем я перешел туда, где был мой файл testvtd.java, и запустил его как javac testvtd.java, а затем java testvtd. Я обязательно включил новый файл jar, который вы мне отправили, в папку ximpleware, поэтому он был назван vtd-xml_2.13.jar. Но все равно получил тот же результат :( Есть мысли?   -  person Marco    schedule 07.06.2016
comment
Это сработало !! хаха спасибо! но тогда почему в загружаемый файл включены две банки?   -  person Marco    schedule 07.06.2016
comment
2 баночки? Нет, дело не в этом .... вероятно, кто-то допустил ошибку при редактировании пути к классу?   -  person vtd-xml-author    schedule 07.06.2016


Ответы (1)


Для первой проблемы я выполнил запрос на последней сборке ... он возвращает

The fox - Found: 'jumps'

Похоже, что это, к сожалению, ошибка, появившаяся в 2.12, о которой было сообщено и исправлено ... обратите внимание, что она должна работать правильно в 2.10 или 2.11

перейдите на страницу http://vtd-xml.cvs.sourceforge.net/viewvc/vtd-xml/ximple-dev/com/ximpleware/LocationPathExpr.java?revision=1.64 и загрузите файл и создайте банку самостоятельно, используя сборку .bat скрипт в комплекте с дистрибутивом ...

Я также провел второй тест на последней сборке (намеченной на 2.13), он работает нормально и возвращает один узел ...

Похоже, они связаны с одной и той же ошибкой ...

person vtd-xml-author    schedule 03.06.2016
comment
Поэтому я заменил файл LocationPathExpr.java в своей копии папки Ximpleware, чем после настройки моего PATH для запуска javac и jar я запустил файл build.bat, который обновил jar vtd-xml-2-12.jar. Затем я скопировал это в свою рабочую папку и запустил код, но он все равно дал мне тот же результат. - person Marco; 03.06.2016
comment
вы удалили старую банку и заменили ее новой? Если это не сработает. Позвольте мне сделать сборку с моей стороны и поставить банку для загрузки в ближайшее время ... даст вам URL-ссылку, это будет в значительной степени v2.13 глава запланированного выпуска - person vtd-xml-author; 03.06.2016
comment
Да, я удалил старую банку из своего рабочего каталога, я не удалял ту из папки Ximpleware. однако одна из фляг была изменена. Да, я был бы очень признателен! Спасибо! - person Marco; 04.06.2016