0

我想知道你是否可以帮助我。我正在尝试TFHpple使用 Swift 1.2 来解析 HTML 数据,但在计算 XPath 表达式时遇到问题。我收到以下错误:

可选(https://www.rac.co.uk/buying-a-car/car-passport/report/buyer/purchase/?BuyerVrm=yg06dxt

XPath 错误:无效的表达式
//td[@class='CarMiniProfile-TableHeader']/td

XPath 错误:无效的表达式 //td[@class='CarMiniProfile-TableHeader']/td

2016-03-01 16:26:23.645 CarCamera[1974:63769] 无法评估 XPath。空节点!!

我尝试使用的 XPath 代码是

var XPathString = "//td[@class=‘CarMiniProfile-TableHeader’]/td"

我试图获取的信息是输入的汽车的makemodel

<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)
            }
        }
4

1 回答 1

0

首先:在您的样本中,您有:

 <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]
于 2016-03-02T00:18:32.413 回答