XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
我想知道你是否可以帮助我。 我正在尝试使用
TFHpple
来使用Swift 1.2解析HTML数据,但是我在解决XPath表达式方面遇到了问题。 我收到以下错误:可选( https://www.rac.co.uk/buying-a-car/car-passport/report/buyer/purchase/?BuyerVrm=yg06dxt )
XPath错误:表达式无效
// TD [@类= 'CarMiniProfile-的tableHeader'] / TDXPath错误:表达式无效// td [@ class ='CarMiniProfile-TableHeader'] / td
2016-03-01 16:26:23.645 CarCamera [1974:63769]无法评估XPath。 空节点!!
我试图使用的XPath代码是
var XPathString = "//td[@class=‘CarMiniProfile-TableHeader’]/td"
我想要获得的信息是所输入汽车的
make
和model
。<div> <table class="CarMiniProfile-table"> <tbody> <tr class="CarMiniProfile-tableFirstRow"> <td class="CarMiniProfile-tableHeader"> Make </td> <td> FIAT </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Model </td> <td> PUNTO SPORTING M-JET </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Colour </td> <td> BLUE </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Year </td> <td> 2006 </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Engine Size </td> <td> 1910 cc </td> </tr> </tbody> </table> </div>
SWIFT代码:
var newURL = NSURL(string: "https://www.rac.co.uk/buying-a-car/car-passport/report/buyer/purchase/?BuyerVrm=\(numberplate)") var htmlData: NSData = NSData(contentsOfURL: newURL!)! var Parser = TFHpple(HTMLData: htmlData) var XPathString = "//td[@class=‘CarMiniProfile-TableHeader’]/td" var nodes = Parser.searchWithXPathQuery(XPathString) as NSArray if(nodes.count == 0 ){ println("empty nodes!!") }else{ for element in nodes { println(element.content) } }
I am wondering if you could help me out. I am trying to use
TFHpple
to parse HTML data using Swift 1.2, but I am having issues working out the XPath expression. I am getting the following error:Optional(https://www.rac.co.uk/buying-a-car/car-passport/report/buyer/purchase/?BuyerVrm=yg06dxt)
XPath error : Invalid expression
//td[@class=‘CarMiniProfile-TableHeader’]/tdXPath error : Invalid expression //td[@class=‘CarMiniProfile-TableHeader’]/td
2016-03-01 16:26:23.645 CarCamera[1974:63769] Unable to evaluate XPath. empty nodes!!
The XPath code I am trying to use is
var XPathString = "//td[@class=‘CarMiniProfile-TableHeader’]/td"
The information I am trying to get is the
make
andmodel
of the car entered.<div> <table class="CarMiniProfile-table"> <tbody> <tr class="CarMiniProfile-tableFirstRow"> <td class="CarMiniProfile-tableHeader"> Make </td> <td> FIAT </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Model </td> <td> PUNTO SPORTING M-JET </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Colour </td> <td> BLUE </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Year </td> <td> 2006 </td> </tr> <tr> <td class="CarMiniProfile-tableHeader"> Engine Size </td> <td> 1910 cc </td> </tr> </tbody> </table> </div>
Swift code:
var newURL = NSURL(string: "https://www.rac.co.uk/buying-a-car/car-passport/report/buyer/purchase/?BuyerVrm=\(numberplate)") var htmlData: NSData = NSData(contentsOfURL: newURL!)! var Parser = TFHpple(HTMLData: htmlData) var XPathString = "//td[@class=‘CarMiniProfile-TableHeader’]/td" var nodes = Parser.searchWithXPathQuery(XPathString) as NSArray if(nodes.count == 0 ){ println("empty nodes!!") }else{ for element in nodes { println(element.content) } }
原文:https://stackoverflow.com/questions/35728317
最满意答案
第一:在您的样本中,您有:
<td class="CarMiniProfile-tableHeader">
但是你在询问
//td[@class=‘CarMiniProfile-TableHeader’]
(注意TableHeader中的大写'T')。 xpath区分大小写。
第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。
有很多方法可以在这里获得制作和模型
- 选项1:向上一级并从TR // tr / td [2]中选择将返回一个节点列表(tr的每秒td-child)
- 选项2:使用兄弟轴:// td / following-sibling :: td [1]
First: in your sample you have:
<td class="CarMiniProfile-tableHeader">
but you were querying for
//td[@class=‘CarMiniProfile-TableHeader’]
(notice the capital 'T' in TableHeader). xpath is case sensitive.
Second: by querying for //td[@class=‘CarMiniProfile-TableHeader’]/td you imply that you have a 'td' element inside the outer td, whereas they are siblings.
There are a number of ways to get the make and model here a couple
- option 1: go one level up and select from the TR //tr/td[2] will return you a list of nodes (every second td-child of tr)
- option 2: use the sibling axis: //td/following-sibling::td[1]