XPath 在 JavaScript 中选择一个链接集


XPath select a link set in JavaScript

我正在尝试使用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 个字符。