首先,我可以假设所有以jpeg,jpg,bmp,png或gif结尾的网址都是图片,而其他网址则不是。
我想到了,并试了两个解决方案:
但是,似乎这些都不存在于XPath 1.0中,或者至少它们在Firefox中不存在(我正在编写一个greasemonkey脚本,所以它对于在Firefox中工作的路径非常重要。) / p>
对标题感到抱歉,SO没想到“在XPath 1.0中查找图像的所有链接”是否足够独特
答案 0 :(得分:3)
虽然您要求使用XPath解决方案,但另一种方法是使用jQuery或Prototype之类的东西,它使用CSS选择器来选择元素。
例如,使用jQuery,您可以使用:
$("a[href$='jpg'],a[href$='gif'],a[href$='png']").each(functionOfChoice);
答案 1 :(得分:2)
您可以使用substring
和string-length
(两者中的 在XPath 1.0中)的组合来模拟ends-with
。它不漂亮,但它有效:
substring(@href, string-length(@href) - 3 + 1, 3) = 'jpg'
(3
这里是jpg
的长度; 1
是为substring
的基于1的索引进行调整)
应具有与
相同的真值ends-with(@href, 'jpg')
我从您的问题中假设您知道如何分别检查每个可能的扩展名。
答案 2 :(得分:2)
XPath 1.0中没有正则表达式,并且没有ends-with()
。
URL不能包含空格而不会变为无效,因此您可以使用它们来实现字符串结束匹配。你可以这样做:
//a[
contains(concat(@href, ' '), '.jpg ' or
contains(concat(@href, ' '), '.bmp ' or
contains(concat(@href, ' '), '.png '
]
或者这个(如@AakashM建议的那样):
//a[
substring(@href, string-length(@href) - 2, 3) = 'jpg' or
substring(@href, string-length(@href) - 2, 3) = 'bmp' or
substring(@href, string-length(@href) - 2, 3) = 'png'
]
我认为后一种选择会表现得更好,而前者更短,更令人愉悦。如果您在这里迫切需要表现,则取决于此。
答案 3 :(得分:0)
这很难,因为XPath没有ends-with()函数,您需要使用它来检查相关文件扩展名的HREF属性的结尾。您将不得不使用substring-after()
。
它不会很漂亮,就像......
fn:substring-after(a[@href], '.') = 'jpg'
编辑:substring-after
似乎not a part of XPath 1.0,因此您必须使用甚至丑陋的 substring
和string-length