使用Alamofire+Kanna爬取数据时,无法将libxmlHTMLNode转为NSString的问题
为什么
as! String无法将Kanna的libxmlHTMLNode转为String? 嘿,这个问题我太熟了!你踩的坑其实是把对象的打印描述和对象本身的类型搞混了,咱们一步步说清楚:
核心原因:libxmlHTMLNode不是字符串类型
Kanna解析HTML后返回的libxmlHTMLNode是一个DOM节点对象,它包含了这个节点的标签名、属性、子节点、文本内容等完整的结构信息。控制台能打印出内容,是因为这个对象实现了CustomStringConvertible协议——打印时会自动调用它的description方法输出可读的文本,但这并不代表它本身就是String/NSString类型。强制用as! String转换,相当于把一个复杂对象硬塞进字符串的类型里,Swift当然会抛出类型不匹配的错误。
正确的转换方式
根据你想要的内容,选对应的方法:
- 获取节点的文本内容(最常用):用节点的
text属性,它返回可选String,直接用就行:if let nodeText = yourNode.text { // nodeText就是你要的字符串,可直接用于应用逻辑 print(nodeText) } - 获取节点的HTML源码:如果需要节点本身的HTML代码(包括标签),用
innerHTML(节点内部的HTML)或outerHTML(包含节点自身的HTML):if let innerHTML = yourNode.innerHTML { print(innerHTML) } - 仅获取控制台打印的描述文本(一般用于调试):如果只是想拿到控制台显示的那串描述,用
String(describing:):let debugStr = String(describing: yourNode) print(debugStr) // 和控制台打印的内容一致
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

