在Swift中如何用SwiftSoup解析带特定id属性的HTML标签?
用SwiftSoup提取带id属性的HTML标签内容
当然有可行的实现方法!SwiftSoup支持强大的CSS选择器语法,刚好能满足你筛选带id属性元素的需求,下面是具体的实现步骤和代码示例:
核心思路
用CSS选择器 *[id] 匹配所有带有id属性的HTML元素,然后遍历这些元素,提取你需要的内容(纯文本或HTML结构)存入数组即可。
完整代码示例
import SwiftSoup // 定义方法:从HTML字符串中提取带id属性的元素内容 func extractContentFromElementsWithId(htmlString: String) throws -> [String] { // 1. 解析HTML字符串为Document对象 let doc = try SwiftSoup.parse(htmlString) // 2. 使用选择器筛选所有带id属性的元素 let elementsWithId = try doc.select("*[id]") var contentArray: [String] = [] // 3. 遍历筛选出的元素,提取内容 for element in elementsWithId { // 选项1:提取元素的纯文本内容(不含HTML标签) let textContent = try element.text() contentArray.append(textContent) // 选项2:提取元素的innerHTML(包含子标签的HTML结构),替换上面的text()即可 // let htmlContent = try element.html() // contentArray.append(htmlContent) } return contentArray }
进阶调整
如果你有更精准的筛选需求,可以修改选择器:
- 只提取带id的
<div>标签:使用选择器div[id] - 只提取id属性值包含特定关键词的元素:比如
*[id*="target"](匹配id里有"target"的元素) - 同时获取元素的id值和内容:可以把数组改成元组类型,示例如下:
func extractIdAndContent(htmlString: String) throws -> [(id: String, content: String)] { let doc = try SwiftSoup.parse(htmlString) let elementsWithId = try doc.select("*[id]") var resultArray: [(id: String, content: String)] = [] for element in elementsWithId { let idValue = try element.attr("id") let textContent = try element.text() resultArray.append((id: idValue, content: textContent)) } return resultArray }
这个方法和你之前提取链接的逻辑很相似,只是把选择器换成了针对id属性的筛选,上手应该很快~
内容的提问来源于stack exchange,提问作者MakiCodes
相关产品推荐
相关产品推荐

