我希望使用Swift XMLParser解析以下内容:
"<p> My <b> mother </b> has <span style=“color:blue”>blue</span> <i>eyes</i>.</p>"
我创建了一个XMLParser,并使用didStartElement方法实现了委托,以打印出元素名称。
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String: String] = [:]) {
print(elementName)
}
我看到打印的所有标签(p,b,I(,但我从来没有得到跨度值。我怎样才能得到它来找到span标签;颜色:蓝色;价值?
这里的问题似乎是字符串本身的引号。“
在此无效。在用"
替换它并适当地调用它之后,它开始工作:
let xml = "<p> My <b> mother </b> has <span style="color:blue">blue</span> <i>eyes</i>.</p>"
let parser = XMLParser(data: xml.data(using: .utf8)!)
let delegate = ParserDelegagte()
parser.delegate = delegate
parser.parse()
class ParserDelegagte: NSObject, XMLParserDelegate{
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
print("start: ", elementName)
print(attributeDict)
}
// 2
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
print("end: ", elementName)
print("end: ", qName ?? "empty")
}
// 3
func parser(_ parser: XMLParser, foundCharacters string: String) {
let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print("found string: ", data)
}
}
输出:
start: p
[:]
found string: My
start: b
[:]
found string: mother
end: b
end: empty
found string: has
start: span
["style": "color:blue"]
found string: blue
end: span
end: empty
found string:
start: i
[:]
found string: eyes
end: i
end: empty
found string: .
end: p
end: empty
关于您关于获得span
的价值的第二个问题style
:
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
if elementName == "span", let style = attributeDict["style"]{
print(style)
}
}