XPATH的第一要素

时间:2015-03-09 13:19:33

标签: php dom xpath

问题与XPath Get first element of subset类似,但我认为它有点不同。

以下是以下博客: http://www.mademoiselledeco.com/

我想获得每篇文章的第一张照片。为此,我想到了以下xpath查询:

//div[contains(@class,'type-post status-publish')]//img/@src

按照我上一篇文章的例子,我也尝试过:  //div[contains(@class,'type-post status-publish')](//img/@src)[1]

但是那说

  

警告:DOMXPath :: query():表达式无效

任何想法?

非常感谢

3 个答案:

答案 0 :(得分:1)

好的,我理解,在检查来源后:每个<img>都包含在<p>中,因此img[1]将匹配所有图片,因为它们是在段落,第一张图片。

在这种情况下,我宁愿尝试获取包含图像的第一段:

//div[contains(@class,'type-post status-publish')]//p[img][1]/img/@src

使用此XPath,我得到9 img/@src

答案 1 :(得分:1)

//div[@class='post-content-container']//p[./img][1]/img

这不是最好的解决方案,但我认为它会起作用。

//div[@class='post-content-container']

应该获得每个帖子

//p[./img][1]/img

应该获得包含图像的第一段。然后选择图像。

答案 2 :(得分:1)

实际上,你所选择的重复问题并不是那么遥远。它在one of it's answers中有一个解释,听起来很合理:

  

[]运算符的优先级(绑定更强)优于//运算符。

所以//img缩写阻碍了你。让我们扩展它:

/descendant-or-self::node()/child::img

在末尾添加[1]将选择每个第一个img孩子(这与其他人概述的完全一样)。这也是为什么谓词的优先级更高的原因。

Abbreviated Syntax section in Xpath 1.0实际上包含了一个注释:

  

注意:位置路径//para[1]与位置路径/descendant::para[1]的含义不同。后者选择第一个后代para元素;前者选择所有后代para元素,这些元素是父母的第一个para子元素。

即:您不是在寻找descendant-or-self轴及其中的任何节点子节点,而只是查找img轴中的第一个descendant元素:

/descendant::img[1]

所以xpath表达式是完整的:

//div[contains(@class,'type-post status-publish')]/descendant::img[1]/@src

您的示例(10)的结果:

 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/03/Couleur-FionaLynch-Caroline-St.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/02/2-OF-MO-cascade-lumineuse2-1024x398.jpg"
 src="https://s-media-cache-ak0.pinimg.com/736x/2e/f7/eb/2ef7eb28dc3e6ac9830cf0f1be7defce.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/01/couleur-peinture-flamant-vert-trekking.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/01/Lily-of-the-Valley-Designed-by-Marie-Deroudilhe-02.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/01/shopping-decoration-jaune-bleu-delamaison-1024x866.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/01/wikao-cheminee-berlin-mademoiselledeco4.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2015/01/voeux2015-mademoiselledeco-blog.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2014/12/suite-novotel-constance-guisset-1.jpg"
 src="http://www.mademoiselledeco.com/wp-content/uploads/2014/12/wish-list-decoration-noel-2014.jpg"

我希望这会有所启发。