swift - 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)
解决方案
您的代码有很多问题,但这里的主要问题是您contentString
的 XML 无效。因此,没有好方法告诉 XMLParser 解析整个字符串。
(实际上我对它的所作所为印象深刻。它没有窒息,而是解析到 XML 的有效性结束,然后停止。)
有效的 XML 必须由单个根元素组成;例如
<root><p>abcdefg</p><p>hijklmn</p><p>123456</p></root>
一旦您将 XML 修改为有效,您将需要考虑如何处理委托以解析该XML。但那是另一回事。
推荐阅读
- azure - 如何使用 Restore-AzSqlDatabase 设置 vCore 最大限制?
- node.js - GET http://localhost:3000/api/house-details/[object%20Object]602ac5039b39c90015b3dc44 400 (Bad Request)
- python - 如何删除我在python中与特殊字符连接的单词
- selenium - selenium UI 测试无法填满弹窗输入凭据
- azure-devops - Azure DevOps REST API 损坏导入私有 Git 存储库
- asp.net-core-mvc - 在 ASP.NET Core MVC 中也使用斜杠 (/) 更改导航栏菜单项 html 链接传递参数
- huawei-mobile-services - 华为Push kit通知消息组数相关
- r - 十六进制字符串到 base58
- css - Django CSS 文件不工作/未提供服务
- xaml - 如何覆盖 UWP 中控件对触摸的默认响应?