我尝试与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 bytes
.
然后我尝试解析它(在do
block):
let xml = SWXMLHash.parse(xmlData)
print(xml)
这返回\n
,所以没有输出。
SWXMLHash
提供了一个方法,该方法接受Data
目的。
我怎样才能让它发挥作用?
根据SWXML哈希值 https://github.com/drmohundro/SWXMLHash/blob/master/Source/SWXMLHash.swift
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
or a Data
对象,在内部它会解析一个Data
如果需要的话,对象进行转换。
这是一种安全的编码方式,这样所有初始化方法都通过同一个方法,并且修复它可以修复所有不同的初始化。
所以它应该有效。
您的问题是您的文件是十六进制数据的字符串表示形式,而不是原始十六进制数据文件。
解决方案是将 XML 字符串放入该文件中。
The Data(contentsOf: fileURL, options: .mappedIfSafe)
会将该 XML 字符串转换为其十六进制表示形式。
然后它就会起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)