Как посчитать элементы с двумя «ограничениями»? - PullRequest
0 голосов
/ 21 мая 2019

Мой XML выглядит примерно так:

<books>
    <book id="b1">
      <title>Set theory and the continuum problem</title>
      <category>Mathematics</category>
      <location>
        <area>hall1</area>
        <case>1</case>
        <shelf>2</shelf>
      </location>
      <description>A lucid, elegant, and complete survey of set theory.</description>
      <history>
        <borrowed by="m4"/>
        <borrowed by="m2" until="2018-04-05"/>
      </history>
    </book>
    <book id="b2">
      <title>Computational Complexity</title>
      <isbn>978-0201-530-827</isbn>
      <category>Computer Science</category>
      <location>
        <area>hall1</area>
        <case>3</case>
        <shelf>3</shelf>
      </location>
      <description>.</description>
    </book>
    <book id="b3">
      <title>To mock a mockingbird</title>
      <isbn>1-292-09761-2</isbn>
      <category>Logic</category>
      <category>Mathematics</category>
      <location>
        <area>hall1</area>
        <case>1</case>
        <shelf>3</shelf>
      </location>
      <description>.</description>
     </book>
</books>

Можно ли подсчитать, сколько там книг с элементами area = 'hall1' и case = '1'?

Iпробовал это:

count(//books/book[location/area='hall1'])

но я не знаю, как включить case = '1' «ограничение» также

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

** ДОПОЛНИТЕЛЬНЫЙ ВОПРОС **

Можно ли перечислить все названия книг, которые имеют area = 'hall1' и case = '1'?

for $bb in //books/book[location/area='hall1'][location/case='1']
    let $n := //books/book/title
return <book>$n</book>
0 голосов
/ 21 мая 2019

Это должно работать:

count(//books/book[location/area='hall1'][location/case='1'])
...