除了使用正则表达式之外,在Swift中解析HTML
下面是我想在
Swift中解析的HTML代码:
<td class="pinyin"> <a href="rsc/audio/voice_pinyin_pz/yi1.mp3"> <span class="mpt1">yī</span></a> <a href="rsc/audio/voice_pinyin_pz/yan3.mp3"> <span class="mpt3">yǎn</span> </a> </td> 我已经读过Regex不是一个通过HTML解析的好方法但是我写了一个表达式来捕捉我想要的东西(这是跨度之间的字母):yī和yǎn 正则表达式: /pinyin.+<span.+>(.+)</.+<span.+>(.+)<//Us 我想知道如何实现它,以便我可以同时捕获yī和yǎn并将其保存到数组中.此外,我想知道如果没有正则表达式,我是否还有其他方法可以做到这一点. 编辑: 我最终按照Rob的建议使用了TFHpple.虽然我确实花了很长时间才弄清楚如何将它导入Swift,所以我认为为方便起见将它发布在这里会很有帮助: 1.打开项目并将TFHpple文件拖入其中 2.此时,如果您当前项目中未包含任何Obj-C代码,XCode可能会提示您创建桥接头类文件.在这个桥接头文件中,您应该添加: #import <Foundation/Foundation.h> #import "TFHpple.h" #import "TFHppleElement.h" 3.在“常规”下的“链接的框架和库”中选择目标(只需在“常规”选项卡中向下滚动,您将看到它,添加libxml2.2.dylib和libxml2.dylib 4.在“构建设置”下的“标题搜索路径”中,添加$(SDKROOT)/usr/include / libxml2 5.在Build Settings,在Other Linker Flags中,添加-lxml2 请享用! 解决方法
您可以使用典型的iOS HTML解析器,TFHpple:
let data = NSData(contentsOfFile: path) let doc = TFHpple(HTMLData: data) if let elements = doc.searchWithXPathQuery("//td[@class='pinyin']/a/span") 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("//td/a/span") { for element in elements { println(element.children?.first?.content) } } 我有更多的TFHpple里程,所以我个人对此更加满意. NDHpple似乎理论上可能是一个替代方案,虽然我并没有像个人那样疯狂(例如为什么HTMLData参数需要字符串而不是NSData?为什么我必须通过子项导航才能得到// td / a /的内容span结果?[@ class =’pinyin’]限定符似乎不起作用,等等.但是,试试两个,看看你喜欢哪个. 两者都需要桥接头:TFHpple需要在桥接头中使用TFHpple.h,NDHpple需要libxml头.有关详细信息,请参阅每个文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |