Первое, что происходит, когда NSXMLParser
встречает тег XML, это то, что вызывается метод делегата parser:didStartElement:namespaceURI:qualifiedName:attributes:
; Вам, вероятно, нужно будет использовать здесь только переменную elementName
. Затем анализатор XML читает символы в теге и вызывает parser:foundCharacters:
с содержимым. Наконец parser:didEndElement:namespaceURI:qualifiedName
называется.
Подход, который я выбрал, как Apple использует в примере SeismicXML , заключается в использовании следующих методов:
- В
parser:didStartElement:namespaceURI:qualifiedName:attributes:
сравните строку имени элемента с известным значением, чтобы увидеть, является ли эта строка интересующей вас. Если так, тогда установите переменную экземпляра (NSMutableString
; я назову ее contentOfCurrentXMLProperty
) в пустую строку. В противном случае установите значение nil
.
- В
parser:foundCharacters:
добавьте найденные символы к contentOfCurrentXMLProperty
.
- В
parser:didEndElement:namespaceURI:qualifiedName
присвойте значение contentofCurrentXMLProperty
любой соответствующей переменной.
См. Пример SeismicXML для получения дополнительной информации.
Несколько вещей о вашем конкретном случае: во-первых, поскольку анализатор XML возвращает только строки, вам необходимо преобразовать строку в целое число (или любой тип данных, который вы используете) для status
.
Во-вторых, поскольку вам нужно только первое значение для record
, в parser:didStartElement:...
я бы установил BOOL
, который будет указывать, видели ли вы уже тег record
ранее, и, если это так, установить contentOfCurrentXMLProperty
до nil
.