提问人:Martin01 提问时间:4/2/2023 更新时间:4/2/2023 访问量:32
Swift 从考虑标签的网页中获取嵌套文本
Swift Getting nested text from web page considering tags
问:
我想从本地 HTML 获取文本(因为它实际上是一个 EPUB 文件,xhtml,但我认为这没有区别)。为此,我使用 SwiftSoup。我当前的代码如下所示:
import SwiftSoup
func getDisplayedTextFromLocalHTMLFile(at url: URL) -> String? {
do {
let htmlString = try String(contentsOf: url, encoding: .utf8)
let doc = try SwiftSoup.parse(htmlString)
let bodyElements = try doc.select("body *")
let displayedText = try getDisplayedElementsRecursiv(bodyElements)
return displayedText
} catch {
print("Error reading or parsing HTML file: \(error.localizedDescription)")
return nil
}
}
private func getDisplayedElementsRecursiv(_ elements: Elements) throws -> String {
let displayedText = try elements
.flatMap { element -> [String] in
let tagName = element.tagName().lowercased()
if tagName == "h1" || tagName == "h2" || tagName == "h3" {
return ["TEST1234"]
} else if tagName == "div" {
return [try getDisplayedElementsRecursiv(element.children())]
} else {
return [try element.text()]
}
}
return displayedText.joined(separator: " ")
}
我使用递归是为了能够更有效地读出嵌套内容。在这里,我想根据使用的标签采取不同的行动。现在不应读取具有 h1、h2、h3 标记的标题(首先应返回“TEST1234”进行调试)。
https://i.stack.imgur.com/veINM.png
由于这个例子,我决定使用递归,因为标题有时可能位于任意数量的<dis>后面。此外,我想继续使用一种方法,将某些标签(如此类标签)列入黑名单,并且如果我想在此过程中单独处理更多标签,则易于扩展
但是,在调试时,我每次都得到:
(字符串?$R 0 = “ 第六章 北方的荒原
答: 暂无答案
评论