Я использую 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));
}
Я построил для вас кувшин http://vtd-xml.sf.net/vtd-xml_2.13. jar –
также вы можете использовать parseFile vtdGen для упрощения кодирования ... https: //ximpleware.wordpress.com/2016/06/02/parsefile-vs-parse-a-quick-comparison/ –
plz загрузить последний файл jar, когда это выпущен ... который очень скоро .. –