Нахавандипур Вандад
Шрифт:
Начнем синтаксический разбор. Первый элемент, который нас интересует, — это метод parserDidStartDocument:. В нем мы просто сбрасываем все значения:
Следующий метод называется parser: didStartElement: namespaceURI: qualifiedName: attributes:. В этом методе создадим корневой элемент (если он еще не создан). Когда в XML-файле начинается разбор любого нового элемента, мы вычисляем, где именно в структуре XML-файла находимся, а потом добавляем новый элемент-объект к актуальному элементу-объекту:
Теперь перед нами метод parser: foundCharacters:. Для каждого текущего элемента этот метод может вызываться несколько раз, поэтому необходимо гарантировать, что мы сможем сделать несколько записей в этом методе. Например, если текст элемента имеет 4000 символов в длину, то парсер может разобрать не более 1000 символов за первый ход, еще 1000 — за второй и т. д. В таком случае синтаксический анализатор вызовет метод parser: foundCharacters: для данного элемента четыре раза. Вероятно, вам потребуется просто аккумулировать результаты и вернуть их в виде строки:
Следующий метод, с которым необходимо разобраться, называется parser: didEndElement: namespaceURI: qualifiedName:. Он вызывается, когда парсер доходит до конца элемента. Здесь нам нужно просто вернуть указатель XML-элементов на уровень выше, к тому элементу, который является родительским для только что проанализированного. Все довольно просто:
И последний, но немаловажный момент. Нужно также обработать метод parserDidEndDocument: и избавиться от текущего свойства currentElementPointer:
Вот и все. Теперь можете выполнить синтаксический разбор нашего документа: