Swift XMLParser无法解析整个字符串

时间:2019-06-24 02:18:43

标签: swift nsxmlparser

我尝试使用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)处停止解析

1 个答案:

答案 0 :(得分:1)

您的代码有很多问题,但是这里的主要问题是您的contentString是无效的XML。因此,没有办法告诉XMLParser解析整个字符串。

(实际上,我对它的工作印象深刻。它没有阻塞,而是解析直到XML的有效性终止,然后停止。)

有效的XML必须包含一个根元素;例如

<root><p>abcdefg</p><p>hijklmn</p><p>123456</p></root>

将XML修改为有效后,您将需要考虑如何处理委托以解析那个 XML。但这是另一回事。