SWXMLHash анализировать объект данных - PullRequest
0 голосов
/ 25 апреля 2018

Я пробовал с помощью SWXMLHash и, чтобы разобрать загрузку с веб-сайта, я создал на игровой площадке файл с данными.Я получил это как ответ от 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):

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

Возвращает \n, поэтому нет вывода.

SWXMLHash предоставляет метод, который принимает объект Data.Как я могу заставить это работать?

1 Ответ

0 голосов
/ 26 апреля 2018

Согласно 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 в ее представление Hex.И тогда это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...