【问题标题】:Swift XMLParser cannot parse the whole string [duplicate]Swift XMLParser 无法解析整个字符串 [重复]
【发布时间】:2019-11-05 19:45:09
【问题描述】:

我试图用XMLParser解析一个let contentString = "<p>abcdefg</p><p>hijklmn</p><p>123456</p>",它们是html标签。
当我在XMLParserDelegate 方法中的标签之间打印元素名称和内容时,只打印了第一个标签(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)

【问题讨论】:

    标签: swift nsxmlparser


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 将根元素添加到 contentString 后,它起作用了。谢谢。除了主要问题之外,您能更具体地说明许多问题吗?
    • 好吧,例如,foundCharacters 很可能会为单个文本节点调用多次。您的代码需要为此做好准备。当然,为解析器声明一个委托的策略使得解析更复杂的层次结构变得更加困难。
    猜你喜欢
    • 2019-08-21
    • 2020-07-10
    • 2013-04-27
    • 1970-01-01
    • 2018-09-13
    • 2020-04-29
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多