在 import.io XPath 选择器中用单斜杠替换双斜杠
Replace double slash with single slash in import.io XPath selector
我正在使用 import.io 抓取一些页面。我遇到了一个使用内部 href 的页面,如下所示:http://domain.com//Event
- 注意域名后的双斜杠。根据我的研究,这是为了 SEO 目的而完成的,但我需要得到没有双斜杠的 url,所以它 returns http://domain.com/Event
.
我正在尝试使用 XPath(我对它很陌生),我可以使用 link 得到 //a[contains(@class, 'event-info-btn')]//@href
。
我的下一步是尝试 fn:repace()
使用此:fn:replace(//a[contains(@class, 'event-info-btn')]//@href, 'http://domain.com//', 'http://domain.com/')
。这不起作用 - 没有返回任何内容。
我不确定是我的实现不好,还是 import.io 不支持这个。
- 我还会指出我尝试这样做的原因:import.io 在所有 url 上都失败了。如果我手动删除斜线并重试,它工作正常。
注意 import.io claims 支持 XPath 2.0。
问题
您可能是指 /@href
而不是 //@href
,但这不是真正的问题。
您的 XPath 是 returning 一系列 href
属性,其中 replace()
需要一个字符串。
解决方案
为此HTML,
<div>
<a class="event-info-btn" href="http://domain.com//1">one</a>
<a class="event-info-btn" href="http://domain.com//2">one</a>
<a class="event-info-btn" href="http://domain.com//3">one</a>
</div>
这个 XPath,
for $href in //a[contains(@class, 'event-info-btn')]/@href
return replace($href, 'http://domain.com//', 'http://domain.com/')
将return
http://domain.com/1
http://domain.com/2
http://domain.com/3
根据要求。
更新
This doesn't work in import.io and I'm having trouble finding a
fiddle-like site to test it.
你可以看到这个工作 here.
Import.io, it seems, only allows you to input one line of xpath.
您可以尝试将 XPath 放在一行中,然后:
for $href in //a[contains(@class, 'event-info-btn')]/@href return replace($href, 'http://domain.com//', 'http://domain.com/')
如果这不起作用,则 import.io's claim that they support XPath 2.0 不正确。
我正在使用 import.io 抓取一些页面。我遇到了一个使用内部 href 的页面,如下所示:http://domain.com//Event
- 注意域名后的双斜杠。根据我的研究,这是为了 SEO 目的而完成的,但我需要得到没有双斜杠的 url,所以它 returns http://domain.com/Event
.
我正在尝试使用 XPath(我对它很陌生),我可以使用 link 得到 //a[contains(@class, 'event-info-btn')]//@href
。
我的下一步是尝试 fn:repace()
使用此:fn:replace(//a[contains(@class, 'event-info-btn')]//@href, 'http://domain.com//', 'http://domain.com/')
。这不起作用 - 没有返回任何内容。
我不确定是我的实现不好,还是 import.io 不支持这个。
- 我还会指出我尝试这样做的原因:import.io 在所有 url 上都失败了。如果我手动删除斜线并重试,它工作正常。
注意 import.io claims 支持 XPath 2.0。
问题
您可能是指 /@href
而不是 //@href
,但这不是真正的问题。
您的 XPath 是 returning 一系列 href
属性,其中 replace()
需要一个字符串。
解决方案
为此HTML,
<div>
<a class="event-info-btn" href="http://domain.com//1">one</a>
<a class="event-info-btn" href="http://domain.com//2">one</a>
<a class="event-info-btn" href="http://domain.com//3">one</a>
</div>
这个 XPath,
for $href in //a[contains(@class, 'event-info-btn')]/@href
return replace($href, 'http://domain.com//', 'http://domain.com/')
将return
http://domain.com/1
http://domain.com/2
http://domain.com/3
根据要求。
更新
This doesn't work in import.io and I'm having trouble finding a fiddle-like site to test it.
你可以看到这个工作 here.
Import.io, it seems, only allows you to input one line of xpath.
您可以尝试将 XPath 放在一行中,然后:
for $href in //a[contains(@class, 'event-info-btn')]/@href return replace($href, 'http://domain.com//', 'http://domain.com/')
如果这不起作用,则 import.io's claim that they support XPath 2.0 不正确。