2012-05-21 3 views
0

У меня есть этот XML-файл, и я хочу, чтобы найти эти запросы:XPath запросов - логические условия

  1. Все книги, которые содержат изображение
  2. Все книги с более чем одной картины
  3. Все авторы, которые написали книгу с "Ларри Нивен"

Вот XML:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE inventory SYSTEM "books.dtd"> 
<inventory> 
    <book num="b1"> 
     <title>Snow Crash</title> 
     <author>Neal Stephenson</author> 
     <publisher>Spectra</publisher> 
     <price>14.95</price> 
     <chapter> 
      <title>Snow Crash - Chapter A</title> 
      <paragraph> 
       This is the <emph>first</emph> paragraph. 
       <image file="firstParagraphImage.gif"/> 
       afetr image... 
      </paragraph> 
      <paragraph> 
       This is the <emph>second</emph> paragraph. 
       <image file="secondParagraphImage.gif"/> 
       afetr image... 
      </paragraph> 
     </chapter> 
     <chapter> 
      <title>Snow Crash - Chapter B</title> 
      <section> 
       <title>Chapter B - section 1</title> 
       <paragraph> 
        This is the <emph>first</emph> paragraph of section 1 in chapter B. 
        <image file="Chapter_B_firstParagraphImage.gif"/> 
        afetr image... 
       </paragraph> 
       <paragraph> 
        This is the <emph>second</emph> paragraph of section 1 in chapter B. 
        <image file="Chapter_B_secondParagraphImage.gif"/> 
        afetr image... 
       </paragraph> 
      </section> 
     </chapter> 
     <chapter> 
      <title>Chapter C</title> 
      <paragraph> 
       This chapter has no images and only one paragraph 
      </paragraph> 
     </chapter> 
    </book> 
    <book num="b2"> 
     <title>Burning Tower</title> 
     <author>Larry Niven</author> 
     <author>Jerry Pournelle</author> 
     <publisher>Pocket</publisher> 
     <price>5.99</price> 
     <chapter> 
      <title>Burning Tower - Chapter A</title> 
     </chapter> 
     <chapter> 
      <title>Burning Tower - Chapter B</title> 
      <paragraph> 
       This is the <emph>second</emph> paragraph of chapter B in the 2nd book. 
       <image file="Burning_Tower_Chapter_B_secondParagraphImage.gif"/> 
       afetr image... 
      </paragraph> 
     </chapter> 
    </book> 
    <book num="b3"> 
     <title>Zodiac</title> 
     <author>Neal Stephenson</author> 
     <publisher>Spectra</publisher> 
     <price>7.50</price> 
     <chapter> 
      <title>Zodiac - Chapter A</title> 
     </chapter> 
    </book> 
    <!-- more books... --> 
</inventory> 

А вот мои ответы:

1. /inventory/book[count(image)=1]/title 
2. /inventory/book[count(image)>=1/title 
3. /inventory/book[author=”Larry Niven”][count(author)>1]/author 

Но когда я проверить эти ответы с Java XPath кода, это не работает.

Где ошибки? благодаря

ответ

2

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

/inventory/book[count(.//image) = 1]/title 
/inventory/book[count(.//image) >= 1]/title 

Ваш последний имеет проблемы с котировки (нужно использовать одинарные кавычки), а также дубликаты Larry Niven. Вот исправление:

/inventory/book[author='Larry Niven'][count(author) > 1]/author[. != 'Larry Niven'] 

Примечание вы можете использовать вместо and:

/inventory/book[author='Larry Niven' and count(author) > 1]/author[. != 'Larry Niven'] 
Смежные вопросы