2015-10-26 73 views
0

例如在本页面:斯威夫特的XPath搜索返回的字符串

http://www.homedepot.com/p/Arnold-Universal-Snow-Thrower-Key-Set-4-Piece-490-241-0008/202251530?keyword=4902410008

我们使用这个XPath:

concat(//*[@id='ajaxPrice']/text(), //*[@id='ciItemPrice']/text()) 

我试图在迅速所有库是使用XPath

https://github.com/tid-kijyun/Kanna

https://github.com/topfunky/hpple

https://github.com/honghaoz/Ji

总是空的结果。如果我将返回字符串作为xpath查询的结果,它们都不起作用。任何想法如何我可以返回字符串,但不XMLElement

回答

2

我已经在这个Swift库上试过了你的XPath查询,名为Fuzihttps://github.com/cezheng/Fuzi),它返回'$ 7.98'。 (空白区域没有被修剪,因此您可能需要自己添加)

与您列出的3个库类似,Fuzi也是libxml2的包装。

这里是我的代码

import Fuzi 
let document = try? HTMLDocument(string: htmlString) 
if let result = document?.eval(xpath: "concat(//*[@id='ajaxPrice']/text(), //*[@id='ciItemPrice']/text())") { 
    print(result.stringValue) 
} 
0

在XPath 2我认为这是更好地在下面的例子中使用string-join代替,如:

string-join(//*[@id='ajaxPrice']/text(), //*[@id='ciItemPrice']/text()) 

我希望这可以帮助您。

+0

这是行不通的......因为所有的库要使用XPath归元对他们来说,这样的:'''//一个[开始 - 用(@href,“买.php /“)]''',然后xpath函数正常工作。但是例如:'''normalize-space(// a [starts-with(@href,“buy.php /”)])''' - 不工作 – Arti