无法获取下标文本,从解析html

问题描述:

我解析一个网站,无机化合物,并需要得到它的化学公式。无法获取下标文本,从解析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整个公式?

鉴于从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

    尝试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>"