XPath - 查找至少包含 4 个条件中的 3 个的节点在子节点中匹配

XPath - Find node that contain at least 3 of 4 conditions is matched in child node

我正在尝试浏览一个 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>
      [...]

由于您至少想要 4 个中的 3 个,因此您需要计算符合您条件的角色,并将该数字与 3 进行比较以决定是否应该放映该电影:

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

你可以try it here.

请注意,您当前的尝试可能与以四个目标别名主演的电影的演员表标签相匹配,但它的条件有一些拼写错误:有一个 $alias,每个 @alias 但第一个是在 Cast 标签而不是适当的 Role 标签上搜索的。