多个OR'包含'条件

时间:2015-04-30 10:02:23

标签: php xml xpath

我试图从以下类型的XML中提取导演和演员

第一个案例

Directors <a href="">Leslie Greif</a>. With <a href="">Wendi McLendon-Covey</a>, <a href="">Tammin Sursok</a>, <a href="">Jesse Bradford</a>, <a href="http://www.mymovies.it/biografia/?a=141527">Reid Ewing</a>. Genre    <a href="">Commedy</a>

感谢this回答我现在可以通过查找&#39; With&#39; 字符串将导演与演员分开:

.//a[following-sibling::text()[contains(., 'With')]]

第二个案例

不幸的是,有些情况下没有演员,所以没有&#39; With&#39;字符串,但只有&#39;类型&#39;

Director <a href="">Michael Mellon</a>, <a href="">Alexander Rossi</a>. Genre <a href="">Doc</a>

所以我猜测下面的xpath可以完美无缺地工作:

.//a[following-sibling::text()[contains(., 'With') or contains(., 'Genre')]]

但是如果存在或者没有字符串&#39;使用&#39;这个xpath确实会独立提取每个名称流派。它并不关心第一个条件(&#39; With&#39;)。

1 个答案:

答案 0 :(得分:0)

您可以反过来看一下 - 对于导演,您会找到包含 GenreWith的第一个文本节点,然后提取所有< em>前面的 a元素

text()[contains(., 'With') or contains(., 'Genre')][1]/preceding-sibling::a

对于演员而言,您需要aWith之间的所有Genre元素(如果没有With则可能为零)

a[preceding-sibling::text()[contains(., 'With')]]
 [following-sibling::text()[contains(., 'Genre')]]