我尝试使用let contentString = "<p>abcdefg</p><p>hijklmn</p><p>123456</p>"
解析HTML标记XMLParser
。
当我在XMLParserDelegate
方法中的标记之间打印elementName和内容时,仅打印第一个标记(p,abcdefg)。
let contentString = "<p>abcdefg</p><p>hijklmn</p><p>123456</p>"
if let data = contentString.data(using: .utf8) {
let parser = XMLParser(data: data)
parser.parse()
}
XMLParserDelegate
方法
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
print(elementName)
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
print(string)
}
控制台日志
p
abcdefg
我不知道为什么解析器在第一个标签(p)处停止解析
答案 0 :(得分:1)
您的代码有很多问题,但是这里的主要问题是您的contentString
是无效的XML。因此,没有办法告诉XMLParser解析整个字符串。
(实际上,我对它的工作印象深刻。它没有阻塞,而是解析直到XML的有效性终止,然后停止。)
有效的XML必须包含一个根元素;例如
<root><p>abcdefg</p><p>hijklmn</p><p>123456</p></root>
将XML修改为有效后,您将需要考虑如何处理委托以解析那个 XML。但这是另一回事。