2013-06-13 2 views
1

Я смотрю на пример xpath x3 для книжного магазина w3c here.составные выражения xpath через узлы

На основе этого XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 

    <bookstore> 

    <book category="COOKING"> 
     <title lang="en">Everyday Italian</title> 
     <author>Giada De Laurentiis</author> 
     <year>2005</year> 
     <price>30.00</price> 
    </book> 

    <book category="CHILDREN"> 
     <title lang="en">Harry Potter</title> 
     <author>J K. Rowling</author> 
     <year>2005</year> 
     <price>29.99</price> 
    </book> 

    <book category="WEB"> 
     <title lang="en">XQuery Kick Start</title> 
     <author>James McGovern</author> 
     <author>Per Bothner</author> 
     <author>Kurt Cagle</author> 
     <author>James Linn</author> 
     <author>Vaidyanathan Nagarajan</author> 
     <year>2003</year> 
     <price>49.99</price> 
    </book> 

    <book category="WEB"> 
     <title lang="en">Learning XML</title> 
     <author>Erik T. Ray</author> 
     <year>2003</year> 
     <price>39.95</price> 
    </book> 

</bookstore> 

Я пытаюсь сделать это с помощью XPath:

«ли это XML docuement есть книга, которая имеет автор 'Джеймс McGovern' и цена '49 .99' и делает этот XML документ также книгу, которая имеет автор „Эрик Т. Рэй“ и цена '39 .95'

Это утверждение человека верно, что эквивалентно XPath? Можно ли запускать выражения через узлы-узлы, и если да, то как?

Чтобы уточнить, на других языках, можно было бы сделать что-то вроде этого:

(author1 = 'James McGovern' and price1 = '49.99') and (author2 = 'Erik T. Ray' and price2 = '39.95') 

Где author1 \ price1 дети: <book category="WEB"> с названием: <title lang="en">XQuery Kick Start</title>

И author2 \ price2 являются дети из: <book category="WEB"> с названием: <title lang="en">Learning XML</title>

+0

'] и [' не имеет никакого смысла для меня. Что вы ожидаете от этого? – hek2mgl

+0

Я знаю, это трудная проблема для описания. Я опубликовал редактирование, чтобы уточнить ... надеюсь. – javamonkey79

+0

Я уверен, что вы имеете в виду «или» в этом случае – hek2mgl

ответ

1

Update:

После вашего последнего редактирования я наконец получил то, что вы пытаетесь точно :). Если вы хотите, чтобы убедиться, что оба узла присутствуют, то вы можете использовать следующий запрос:

boolean(/bookstore[book[price = "39.95" and author = "Erik T. Ray"] and book[price = "49.99" and author = "James McGovern"]]) 
+0

См. Мои последние изменения. +1 независимо :) – javamonkey79

+0

После последнего редактирования я полностью понимаю ваш вопрос. :) Я надеюсь, что мой ответ будет одобрен для вас, хотя он не отвечает на ваш вопрос напрямую. Он просто возвращает два узла, если они присутствуют. – hek2mgl

+0

@ javamonkey79 Никогда не думал, что 'и' могут иметь смысл! :) – hek2mgl

1

Выполнение сравнения для каждой книги это все, что требуется для того, обновленный XPath является:

boolean(//book[author='James McGovern' and price='49.99']) and boolean(//book[author='Erik T. Ray' and price='39.95']) 

или если есть adocument с несколькими книжных магазинах, и вы хотите, чтобы найти все книжные магазины с обеих книг, которые вы можете сделать:

/bookstore[book[author='James McGovern' and price='49.99'] and book[author='Erik T. Ray' and price='39.95']] 
+0

Нет, не совсем. Я знаю, что это не очень понятно - я действительно сосать XPath, извините. Посмотрите мое последнее редактирование. +1 для попытки? – javamonkey79

+0

См. Ответ @ hek2mgl, он получил его (после моего окончательного редактирования). – javamonkey79