在swift中解析html的最佳做法是什么? [英] What is the best practice to parse html in swift?
问题描述
我是一个Swift新手。我需要在Swift iOS项目中使用Python的BeautifulSoup。准确地说,我需要获取以结尾的
。我应该采取的步骤是什么?< a>
的所有 href
。 TXT
Swift
和 Objective-C
类似如下:请看以上四个库中的以下示例,主要使用 XPath 2.0 :
hpple :
let data = NSData(contentsOfFile:path)
let doc = TFHpple(htmlData:data)
如果让元素= doc.searchWithXPathQuery(// a / @href [ends-with(。,'。txt')])as? [TFHppleElement] {
元素元素{
println(element.content)
}
}
NDHpple :
let data = NSData(contentsOfFile:path)!
let html = NSString(data:data,encoding:NSUTF8StringEncoding)!
let doc = NDHpple(HTMLData:html)
if元素= doc.searchWithXPathQuery(// a / @ href [ends-with(。,'。txt')]){
元素元素{
println(element.children?.first?.content)
}
}
Kanna(Xpath和CSS选择器):
let html =< html>< head>< / head>< body>< ul>< li>< input type = 'image'name ='input1'value ='string1value'class ='abc'/>< / li>< li>< input type ='image'name ='input2'value ='string2value'class = 用于inputNodes中的节点{
函数是 Xpath 2.0 。
println(node.contents)
}
$ block $ $ b $ p $ Fu $ Xpath和CSS选择器):
let html =< html> < head>< / head>< body>< ul>< li>< input type ='image'name ='input1'value ='string1value'class ='abc'/>< li>< li>< input type ='image'name ='input2'value ='string2value'class ='def'/>< / li>< / ul>< span class ='spantext' >< b>< b> Hello World 1< / b>< / span>< span class ='spantext'>< b> Hello World 2< / b>< / span>< a href =' example.com'>示例(英文)< / a>< a href ='example.c o.jp将实施例(JP)< / A>< /体>中
do {
//如果编码被忽略,它默认为NSUTF8StringEncoding
let doc = try HTMLDocument(string:html,encoding:NSUTF8StringEncoding)
// XPath查询
作为doc.xpath中的锚点(// a / @ href [ends-with(。,'。txt')]){
print(anchor.stringValue)
}
} catch let error {
print(error)
}
$ b $ <<> code>结尾 -
$ b
SwiftSoup(CSS选择器):
do {
let doc:Document = try SwiftSoup.parse(...)
let links:Elements = try doc .select(a [href])// a with href
let pngs:Elements = try doc.select(img [src $ =。png])
// img与src结尾.png
让masthead:元素? = try doc.select(div.masthead)。first()
// class with masthead
let resultLinks:Elements? =尝试doc.select(h3.r> a)//在h3
之后直接输入a catch Exception.Error(let type,let message){$ b $ print(message)
} catch {
print(error)
}
我希望这帮助你。
I'm a Swift newbie. I need for something like Python's BeautifulSoup in Swift iOS project. Precisely, I need to get all
href
of<a>
that ends with".txt"
. What are the steps that I should take?解决方案There are several nice libraries of HTML Parsing using
Swift
andObjective-C
like the followings:
Take a look in the following examples in the four libraries posted above, mainly parsed using XPath 2.0:
hpple:
let data = NSData(contentsOfFile: path)
let doc = TFHpple(htmlData: data)
if let elements = doc.searchWithXPathQuery("//a/@href[ends-with(.,'.txt')]") as? [TFHppleElement] {
for element in elements {
println(element.content)
}
}
NDHpple:
let data = NSData(contentsOfFile: path)!
let html = NSString(data: data, encoding: NSUTF8StringEncoding)!
let doc = NDHpple(HTMLData: html)
if let elements = doc.searchWithXPathQuery("//a/@href[ends-with(.,'.txt')]") {
for element in elements {
println(element.children?.first?.content)
}
}
Kanna (Xpath and CSS Selectors):
let html = "<html><head></head><body><ul><li><input type='image' name='input1' value='string1value' class='abc' /></li><li><input type='image' name='input2' value='string2value' class='def' /></li></ul><span class='spantext'><b>Hello World 1</b></span><span class='spantext'><b>Hello World 2</b></span><a href='example.com'>example(English)</a><a href='example.co.jp'>example(JP)</a></body>"
if let doc = Kanna.HTML(html: html, encoding: NSUTF8StringEncoding) {
var bodyNode = doc.body
if let inputNodes = bodyNode?.xpath("//a/@href[ends-with(.,'.txt')]") {
for node in inputNodes {
println(node.contents)
}
}
}
Fuzi (Xpath and CSS Selectors):
let html = "<html><head></head><body><ul><li><input type='image' name='input1' value='string1value' class='abc' /></li><li><input type='image' name='input2' value='string2value' class='def' /></li></ul><span class='spantext'><b>Hello World 1</b></span><span class='spantext'><b>Hello World 2</b></span><a href='example.com'>example(English)</a><a href='example.co.jp'>example(JP)</a></body>"
do {
// if encoding is omitted, it defaults to NSUTF8StringEncoding
let doc = try HTMLDocument(string: html, encoding: NSUTF8StringEncoding)
// XPath queries
for anchor in doc.xpath("//a/@href[ends-with(.,'.txt')]") {
print(anchor.stringValue)
}
} catch let error {
print(error)
}
The ends-with
function is part of Xpath 2.0.
SwiftSoup (CSS Selectors):
do{
let doc: Document = try SwiftSoup.parse("...")
let links: Elements = try doc.select("a[href]") // a with href
let pngs: Elements = try doc.select("img[src$=.png]")
// img with src ending .png
let masthead: Element? = try doc.select("div.masthead").first()
// div with class=masthead
let resultLinks: Elements? = try doc.select("h3.r > a") // direct a after h3
} catch Exception.Error(let type, let message){
print(message)
} catch {
print("error")
}
I hope this helps you.
这篇关于在swift中解析html的最佳做法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!