XPath在Swift中无法正常工作

问题描述:

我在swift中使用Kanna从html获取数据。XPath在Swift中无法正常工作

当我做“html/body”作为Xpath时,我从站点获取了正文中的所有内容。当我做“/ html/body/center/table [1]/tbody/tr [1]”时,我什么也没得到,但是当我使用xpath测试器并填写“/ html/body/center/table [1]/tbody/tr [1]“我得到数据。

斯威夫特代码:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    if let doc = Kanna.HTML(url: (NSURL(string: "URL")!), encoding: NSUTF8StringEncoding) { 
     print(doc.title); 

     for link in doc.xpath("/html/body/center/table[1]/tbody/tr[1]") { 
      print(link.text) 
      // print(link["href"]) 
      // print("test"); 

     } 

    } 


} 
+0

上面的代码适用于我的简单HTML页面。你可以发布一个HTML页面的来源吗? – robinj

+0

嗨,这里是一个示例站点:http://roosters.roc-teraa.nl/rooster_uitwisseling/techniek-technologie-college/2P0/2016021520160415/index.htm如果你做XPATH:/ html/body它显示所有的数据,但是如果你进一步像/ html/body/table [1]/tbody/tr [14],它不会在swift中显示任何内容。 – LifeOS

刚刚从你的XPath删除tbody/段。您发布的链接的源没有<tbody>元素:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html><head> 
<title>Klasrooster, van 15-02-2016 t/m 15-04-2016</title> 
<meta name=generator content="Paralax Rostar Eduflex Versie 3.508"> 
<!-- Dit bestand is automagisch aangemaakt. Handmatige wijzigingen kunnen verloren gaan. --> 
<style type=text/css> 
<!-- 
body, th, td { font-family: arial, verdana, geneva, times, helvetica, courier; font-size: 8pt; } 
--> 
</style> 
</head><body><table border="1" width="100%"> 
<tr><th>Klasrooster, van 15-02-2016 t/m 15-04-2016</th></tr> 
<tr><td><a href="2P02025.htm">TT.12MB.b</a></td></tr> 
<tr><td><a href="2P02002.htm">TT.12ME.a</a></td></tr> 

<!-- skipping many rows --> 

<tr><td><a href="2P02202.htm">TT.RES2</a></td></tr> 
<tr><td><a href="2P02038.htm">TT.RES3</a></td></tr> 
</table> 
<!-- XREF START --> 
<table border="0" width="100%"><tr><td>[Vorige periode]</td><td><a href="../../index.htm">Overzichtspagina</a></td><td>[Volgende periode]</td></tr></table> 
<!-- XREF END --> 
</body></html> 

我怀疑你使用的是Firefox或Chrome的“检查”功能,查看您的解析页面的HTML。问题在于它显示浏览器的DOM模型 - 而不是原始源。使用“查看源代码”功能查看原始HTML代码。

+0

你是完全正确的!谢谢!!! – LifeOS