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
为什么 XMLParser
将 straß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
是 属性,在 didStartElement
和 didEndElement
中管理。
Is there an easy way around this
这是一种非常愚蠢的看待方式。这不是你需要 "way around" 的东西。有一个正确的方法来实现 foundCharacters
。去做吧,继续生活。
我在 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
为什么 XMLParser
将 straß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
是 属性,在 didStartElement
和 didEndElement
中管理。
Is there an easy way around this
这是一种非常愚蠢的看待方式。这不是你需要 "way around" 的东西。有一个正确的方法来实现 foundCharacters
。去做吧,继续生活。