gpt4 book ai didi

swift - SWXMLHash 解析数据对象

转载 作者:可可西里 更新时间:2023-11-01 01:08:57 24 4
gpt4 key购买 nike

我尝试使用 SWXMLHash 并模拟从网站下载以进行解析,我在 playground 中创建了一个包含数据的文件。我从 URLSessionManager 得到的响应数据看起来类似于:

3c3f786d 6c207665 7273696f 6e3d2731 ...

但当然要长得多。

我是这样读入的:

guard let fileURL = Bundle.main.url(forResource: "xmlData", withExtension: "")
else { fatalError("cannot load file")}
do {
let xmlData = try Data(contentsOf: fileURL, options: .mappedIfSafe)
} catch {
print(error)
}

我认为这可行,没有错误,如果我打印数据,它返回 169735 字节

然后我尝试解析它(在 do block 内):

let xml = SWXMLHash.parse(xmlData)
print(xml)

这将返回 \n,因此没有输出。

SWXMLHash 提供了一种接受Data 对象的方法。我怎样才能让它发挥作用?

最佳答案

根据 SWXMLHash

public func parse(_ xml: String) -> XMLIndexer {
guard let data = xml.data(using: options.encoding) else {
return .xmlError(.encoding)
}
return parse(data)
}

public func parse(_ data: Data) -> XMLIndexer {
let parser: SimpleXmlParser = options.shouldProcessLazily
? LazyXMLParser(options)
: FullXMLParser(options)
return parser.parse(data)
}

尽管您提供了一个 String 或一个 Data 对象,但如果需要,它会在内部解析一个 Data 对象进行转换。这是一种安全的编码方式,这样所有的初始化方法都通过同一个方法,修复它就修复了所有不同的初始化。

所以它应该可以工作。

你的问题是你的文件是 HexData 的字符串表示,而不是 RawHexData 文件。
解决方案是将 XML 字符串放入该文件。

Data(contentsOf: fileURL, options: .mappedIfSafe) 会将 XML 字符串转换为它的十六进制表示形式。然后它就会起作用。

关于swift - SWXMLHash 解析数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50030468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com