Swift 从考虑标签的网页中获取嵌套文本

Swift Getting nested text from web page considering tags

提问人:Martin01 提问时间:4/2/2023 更新时间:4/2/2023 访问量:32

问:

我想从本地 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 = “ 第六章 北方的荒原

HTML Swift 解析 递归 Swiftsoup

评论


答: 暂无答案