NSXMLParser сообщает неверный номер столбца
Я пытаюсь использовать XMLParser
(NSXMLParser
) для синтаксического анализа XML, но синтаксический анализатор columnNumber
не кажется правильным. Рассмотрим следующий код:
let string = #"<root><ac:structured-macro><ac:rich-text-body></ac:rich-text-body></ac:structured-macro><p></p></root>"#
class Delegate: NSObject, XMLParserDelegate {
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
print("Parser started element \(qName ?? elementName) at column \(parser.columnNumber)")
}
}
let data = string.data(using: .utf8)!
let delegate = Delegate()
let parser = XMLParser(data: data)
parser.delegate = delegate
parser.shouldProcessNamespaces = true
parser.shouldReportNamespacePrefixes = true
parser.parse()
Это печатает:
Parser started element root at column 6
Parser started element ac:structured-macro at column 27
Parser started element ac:rich-text-body at column 46
Parser started element p at column 55
Столбцы для первых трех элементов кажутся правильными, но p
элемент фактически не начинается в столбце 55, он начинается в столбце 91. Символ в столбце 55 - это "c" в </ac:rich-text-body>
.
Это правильное поведение? Мне что-то не хватает в том, как работает XML, что сделало быcolumnNumber
неверно сообщить об этом элементе? Есть ли другой способ получить правильный начальный столбец тега? Или это ошибка вXMLParser
?