XPath - найти дочерний узел, содержащий не менее 3 из 4 условий - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь просмотреть XML-файл, в котором я хочу найти, что по крайней мере три персонажа: Железный Человек, Капитан Америка, Халк или Человек-паук - часть актерского состава.

Моя попытка:

$x("//Subsidiaries/Subsidiary[@id = 'MarvelStudios']/Movie/Cast[Role/@alias = 'Iron Man' and @alias = 'Captain America' and $alias = 'Hulk' and @alias = 'Spider-Man']")

Это ничего не возвращает вообще.

Куда это идет?

Образец кусочка из xml-файла

<Actors>...</Actors>
<Subsidiaries>
   <Subsidiary id="WaltDisneyPictures">...</Subsidiary>
   <Subsidiary id="Lucasfilms">...</Subsidiary>
   <Subsidiary id="MarvelStudios">
     <Movie>
         <Name lang="en">Iron Man</Name>
         <Year>2008</Year>
         <ScreenTime unit="minutes">126</ScreenTime>
         <Cast>
           <Role name="Tony Stark" alias="Iron Man" actor="RobertDowneyJr"/>
           <Role name="Rhodey" actor="TerrenceHoward"/>
           <Role name="Pepper Potts" actor="GwynethPaltrow"/>
         </Cast>
     </Movie>
   <Movie>
      [...]

1 Ответ

1 голос
/ 30 октября 2019

Поскольку вам нужно как минимум 3 из 4, вам нужно посчитать роли, которые соответствуют вашим критериям, и сравнить это число с 3, чтобы решить, следует ли вам показывать фильм или нет:

//Subsidiaries/Subsidiary[@id = 'MarvelStudios']/Movie[count(Cast/Role[@alias = 'Iron Man' or @alias = 'Captain America' or @alias = 'Spider-Man' or @alias = 'Hulk']) >= 3]

Вы можете попробовать это здесь .

Обратите внимание, что ваша текущая попытка могла соответствовать метке броска фильмов с четырьмя целевыми псевдонимами, но в ее состоянии было несколько опечаток: был $alias, и каждый @alias, кроме первого, ищется по тегу Cast, а не по соответствующему тегу Role.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...