SWXMLHash 解析数据对象
SWXMLHash parse Data object
我尝试使用 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)
}
我认为这可行,没有错误,如果我打印数据它 returns 169735 bytes
.
然后我尝试解析它(在 do
块内):
let xml = SWXMLHash.parse(xmlData)
print(xml)
这个returns\n
,所以没有输出。
SWXMLHash
提供了一个接受 Data
对象的方法。
我怎样才能让它工作?
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 字符串转换为它的十六进制表示形式。
然后就可以了。
我尝试使用 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)
}
我认为这可行,没有错误,如果我打印数据它 returns 169735 bytes
.
然后我尝试解析它(在 do
块内):
let xml = SWXMLHash.parse(xmlData)
print(xml)
这个returns\n
,所以没有输出。
SWXMLHash
提供了一个接受 Data
对象的方法。
我怎样才能让它工作?
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 字符串转换为它的十六进制表示形式。
然后就可以了。