2016-06-03 5 views
1

Я использую VTD-XML для запуска выражений xpath, но я обнаружил, что любое выражение XPath более сложное, чем использование адреса типа файла (т. Е. // Книги/авторы), ломается и просто прибегает к возврату всего файла.Поддерживает ли VTD-XML сложные выражения 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' 

ВТД Используется для первого выпуска

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)] 

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

ВТД Код используется для второго выпуска

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)); 
} 
+0

Я построил для вас кувшин http://vtd-xml.sf.net/vtd-xml_2.13. jar –

+0

также вы можете использовать parseFile vtdGen для упрощения кодирования ... https: //ximpleware.wordpress.com/2016/06/02/parsefile-vs-parse-a-quick-comparison/ –

+0

plz загрузить последний файл jar, когда это выпущен ... который очень скоро .. –

ответ

0

Для первого вопроса, я побежал запрос на последнюю сборку ... он возвращает

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

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

Они, по всей видимости, относятся к одной и той же ошибки ...

+0

Итак, я заменил файл LocationPathExpr.java в моей копии папки Ximpleware, чем после настройки моего PATH для запуска javac и jar, я запустил файл build.bat, который обновил банку «vtd-xml-2-12.jar» Затем я скопировал это в свою рабочую папку и запустил код, но он все равно дал мне тот же результат. – Marco

+0

вы удалили старую банку и заменили ее на новую банку? Если это не сработает Позвольте мне сделать сборку на моем конец и поставить банку для вас скоро скачать ... дайте ссылку URL, это будет в значительной степени v2.13 глава запланированного выпуска –

+0

. Да, я удалил старую банку из своей рабочей директории. Я не удалял ее из папки Ximpleware. однако одна из банок была изменена. Да, я бы очень признателен! Спасибо! – Marco