问题与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():表达式无效
任何想法?
非常感谢
答案 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"
我希望这会有所启发。