как сопоставить значения индекса в XPath Java - PullRequest
1 голос
/ 03 апреля 2012

Допустим, у меня есть следующая база данных (как правило, они будут намного больше):

<inventory>
<book year="2000">
    <title>Snow Crash</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553380958</isbn>
    <price>14.95</price>
</book>

<book year="2005">
    <title>Burning Tower</title>
    <author></author>
    <publisher>Pocket</publisher>
    <isbn>0743416910</isbn>
    <price>5.99</price>
</book>

<book year="1995">
    <title>Zodiac</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553573862</isbn>
    <price>7.50</price>
</book>

<!-- more books... -->

Я хочу взять все названия книг и авторов, а затем распечататьиз названий и соответствующих авторов.Обратите внимание, что вторая запись не перечисляет автора.Я обнаружил, что XPath создаст список из 3 книг, но только из 2 авторов.Поэтому я не могу напечатать соответствующие комбинации «Книга / Автор», создав цикл с одинаковыми значениями индекса из каждого списка (он будет работать только для первой записи, затем сбрасывается на единицу и в итоге выдает исключение нулевого указателя, когда естьбольше нет записей в списке авторов).Есть ли способ обойти эту проблему?

Спасибо, что прочитали.

Примечание: пока что фрагмент кода:

XPathExpression expr1 = xpath.compile("//pre:entry/pre:title/text()");
XPathExpression expr2 = xpath.compile("//pre:entry/pre:author/text()");

Object result1 = expr1.evaluate(doc, XPathConstants.NODESET);
Object result2 = expr2.evaluate(doc, XPathConstants.NODESET);

NodeList nodes1 = (NodeList) result1;
NodeList nodes2 = (NodeList) result2;

for (int i = 0; i < nodes1.getLength(); i++) {
   System.out.println(nodes1.item(i).getNodeValue());
   System.out.println(nodes2.item(i).getNodeValue());
}

1 Ответ

2 голосов
/ 03 апреля 2012

Вы должны выполнить итерацию, бросить все элементы book, затем в каждом элементе book получить элементы title и author, например. в псевдокоде:

var bookNodes = XPath.select('//pre:book');
foreach book in booknodes
    var title = book.select('pre:title');
    var author = book.select('pre:author');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...