首页 > 解决方案 > Swift XMLParser 无法解析整个字符串

问题描述

我试图let contentString = "<p>abcdefg</p><p>hijklmn</p><p>123456</p>"XMLParser. 当我在方法中的
标签之间打印 elementName 和 content 时,只打印了第一个 tag(p, abcdefg)XMLParserDelegate

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)

标签: swiftnsxmlparser

解决方案


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

(实际上我对它的所作所为印象深刻。它没有窒息,而是解析到 XML 的有效性结束,然后停止。)

有效的 XML 必须由单个根元素组成;例如

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

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


推荐阅读