如何将Swift XMLParser与span样式标记一起使用



我希望使用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)
}
}

最新更新