XMLParser 在“ß”字符上拆分元素

XMLParser splits elements on “ß” character

我在 iOS 游乐场(Swift 3,Xcode 8.2.1)中有此代码:

import UIKit
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

class ParserDelegate: NSObject, XMLParserDelegate {

    @objc func parser(_ parser: XMLParser, foundCharacters string: String) {
        print("found string:", string)
    }

    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
        print("error:", parseError)
    }

    func parserDidEndDocument(_ parser: XMLParser) {
        PlaygroundPage.current.finishExecution()
    }

}

let string = "<xml>straße</xml>"
let parser = XMLParser(data: string.data(using: .utf8)!)
let delegate = ParserDelegate()
parser.delegate = delegate
parser.parse()

// prints this:
// found string: stra
// found string: ße

为什么 XMLParserstraße 拆分为 straße,而不是将它们全部解析为一个字符串?除了连接 parser(_:foundCharacters:) 找到的所有字符串直到我接到对 parser(_:didEndElement:namespaceURI:qualifiedName:)?

的调用之外,有没有简单的方法解决这个问题?

关心解析器如何分解 运行 文本与您无关。实现 parser(_:foundCharacters:) 的方式是无论调用多少次都会累积文本,直到 didEndElement 到达。典型的实现如下所示:

func parser(_ parser: XMLParser, foundCharacters string: String) {
    self.text = self.text + string
}

...其中 self.text 是 属性,在 didStartElementdidEndElement 中管理。

Is there an easy way around this

这是一种非常愚蠢的看待方式。这不是你需要 "way around" 的东西。有一个正确的方法来实现 foundCharacters。去做吧,继续生活。