2016-11-24 24 views
0

我解析一個網站,無機化合物,並需要得到它的化學公式。無法獲取下標文本,從解析html

let data = NSData(contentsOf: URL(string: "https://en.wikipedia.org/wiki/Gold(III)_bromide")!) 
let doc = TFHpple(htmlData: data as! Data) 

if let elements = doc?.search(withXPathQuery: "//*[@class='selflink']/text()") as? [TFHppleElement] { 
    for element in elements { 
     print("------") 
     print(element.content) 
    } 
} 

它打印出「AuBr」但我需要它來打印整個公式出來,這是「AuBr 」

這是HTML代碼,我是從得到的公式:

enter image description here

我怎樣才能打印出最終的3整個公式?

回答

1

鑑於從Wiki頁面下面的HTML:

<tr> 
    <td> 
    <div style="padding:0.1em 0;line-height:1.2em;"><a href="/wiki/Chemical_formula" title="Chemical formula">Chemical formula</a></div> 
    </td> 
    <td>AuBr<sub>3</sub></td> 
</tr> 

下面的XPath表達式

string(//tr[td[1]/div/a = "Chemical formula"]/td[2]) 

將返回:

> xmllint --xpath 'string(//tr[td[1]/div/a = "Chemical formula"]/td[2])' ~/test.html 
AuBr3 
+0

謝謝你,這真的工作! – Benja0906

+0

我有一個問題更多,如果HTML是這樣的'

  • Barium chloride - 氯化鋇
  • '什麼會XPath表達式需要的樣子,返回「氯化鋇」 – Benja0906

    +0

    @ Benja0906你可以用'CONCAT(//李/ text()[2],// li/sub)'獲得' - BaCl2'。我假設你可以弄清楚如何去掉你不想要的前綴。但是這依賴於HTML的確切結構,我不推薦使用它。 – Markus

    0

    嘗試SwiftSoup

    解析你的html:

    let document = try SwiftSoup.parse("<li><strong class='selflink'>AuBr<sub>3</sub></strong></li>") 
    
    let selflinkElements = try document.getElementsByClass("selflink") 
    
    print(selflinkElements.get(0).tagName())//print "strong" 
    
    print(selflinkElements.get(0).text())//print "AuBr3" 
    
    print(selflinkElements.get(0).html())//print "AuBr<sub>3</sub>"