我正在尝试使用XPath检索链接。该链接用于分页,并在 JavaScript 中设置。该网站 stocklot.com。使用此代码:
$x("//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href")
我能够得到这个:
[href="javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');”]
你知道我怎么能只选择链接而不选择 JavaScript 部分吗?
以下解决方案假定字符串(如问题中 href 属性的值)以 3 个字符结尾 ');
。
对于简化示例
<root>
<div class="pagination pagination-centered hidden-phone">
<ul>
<li>
first
</li>
<li>
<a href="javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');">link</a>
</li>
</ul>
</div>
</root>
XPath
string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href)
返回
javascript:setPaginazione('FRM_ADS','http://www.stocklot.com/home/list/0/30/30.html');
若要仅获取链接,可以将 XPath 调整为:
substring(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),string-length(substring-before(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1,string-length(substring-after(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1)
结果:
http://www.stocklot.com/home/list/0/30/30.html
为了在 XPath 上缩进的可读性,例如,检索的字符串string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href)
写为 $string
:
substring($string, string-length(substring-before($string,'http'))+ 1,
string-length(substring-after($string,'http')) + 1)
作为附加说明:
substring(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),string-length(substring-before(string(//div[@class='pagination pagination-centered hidden-phone']/ul/li[last()]/a/@href),'http')) + 1)
结果在
http://www.stocklot.com/home/list/0/30/30.html');
虽然可以获取.html
的位置并使用类似的 XPath 在 .html
之后substring()
,但链接可能以 .php
结尾或包含参数(例如以 .html?id=10
结尾),因此上述方法只是切断了最后 3 个字符。