una tema tecnologías tecnologias que programacion para paginas pagina lenguaje las introduccion historia hacer etiquetas ejemplos dinamicas dinamica desarrollo completa como codigo aplicaciones ala html ios swift parsing

html - tema - tecnologias para el desarrollo de aplicaciones web pdf



¿Cuál es la mejor práctica para analizar html en swift? (3)

Soy un novato Swift. Necesito algo como el proyecto BeautifulSoup de Python en Swift para iOS. Precisamente, necesito obtener todo href de <a> que termina con ".txt" . ¿Cuáles son los pasos que debo seguir?


Hay varias bibliotecas agradables de análisis HTML usando Swift y Objective-C como las siguientes:

Eche un vistazo a los siguientes ejemplos en las cuatro bibliotecas publicadas anteriormente, analizadas principalmente con 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 (Selectores Xpath y 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>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 (Selectores Xpath y 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>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) }

La función ends-with forma parte de Xpath 2.0 .

SwiftSoup (Selectores 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 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") }

Ji (XPath) :

let jiDoc = Ji(htmlURL: URL(string: "http://www.apple.com/support")!) let titleNode = jiDoc?.xPath("//head/title")?.first print("title: /(titleNode?.content)") // title: Optional("Official Apple Support")

Espero que esto te ayude.


Prueba SwiftSoup , un puerto de jsoup a Swift.

let html: String = "<a id=1 href=''?foo=bar&mid&lt=true''>One</a> <a id=2 href=''?foo=bar&lt;qux&lg=1''>Two</a>"; let els: Elements = try SwiftSoup.parse(html).select("a"); for element: Element in els.array(){ print(try element.attr("href")) }


Puedes probar este swift-html-parser:

https://github.com/tid-kijyun/Swift-HTML-Parser

Esto ayuda mucho.

Y para obtener tu html de un txt puedes:

let file = "file.txt" if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] { let dir = dirs[0] //documents directory let path = dir.stringByAppendingPathComponent(file); let html = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)

Editar:

Para obtener lo que necesita, puede usar como ejemplo:

import Foundation let html = "theHtmlYouWannaParse" var err : NSError? var parser = HTMLParser(html: html, error: &err) if err != nil { println(err) exit(1) } var bodyNode = parser.body if let inputNodes = bodyNode?.findChildTags("b") { for node in inputNodes { println(node.contents) } } if let inputNodes = bodyNode?.findChildTags("a") { for node in inputNodes { println(node.getAttributeNamed("href")) //<- Here you would get your files link } }