разбор xml в iPhone и получение других тегов с такими же именами - PullRequest
1 голос
/ 31 июля 2009

Позвольте мне попытаться объяснить как можно яснее, что именно я имею в виду под этим вопросом.

XML выглядит так

<Books>
<Book id="1">
<title>Circumference</title>
<author>Nicholas Nicastro</author>
<summary>Eratosthenes and the Ancient Quest to Measure the Globe.</summary>
</Book>

<Book id="2">
<title>Copernicus Secret</title>
<author>Jack Repcheck</author>
<summary>How the scientific revolution began</summary>

</Book>

</Books>

Это будет выглядеть так

<Books>
<Book id="1">
<title>Circumference</title>
<author>Nicholas Nicastro</author>
<summary id ='1'>Eratosthenes and the Ancient Quest to Measure the Globe.</summary>
<summary id ='2'>Eratosthenes more info in another tag.</summary>
<summary id ='3'>Eratosthenes and again another tag.</summary>
<summary id ='4'>Eratosthenes and the final tag another one here</summary>
</Book>

<Book id="2">
<title>Copernicus Secret</title>
<author>Jack Repcheck</author>
<summary id ='1'>How the scientific revolution began</summary>
<summary id ='2'>Eratosthenes more info in another tag.</summary>
<summary id ='3'>Eratosthenes and again another tag.</summary>
<summary id ='4'>Eratosthenes and the final tag another one here</summary>
</Book>

</Books>

Теперь, если я буду следовать инструкции на сайте, указанном выше, это не объясняет, как обрабатывать сводку 2,3,4 (XML, который мне нужно проанализировать, выглядит так) и как я могу показать их вывод. Все, что я получу, это последняя строка. Кто-нибудь имеет представление о том, как я могу получить другие (имея в виду 2,3, в этом случае кажется, что он показывает только последний, так как это, вероятно, последний в currentElementValue).

Я немного запутался, должен ли я также обратиться к этому атрибуту или мне нужно создать новый поисковый тег в моем парсере?

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

Я думаю, это - это то, на что вам нужно обратить внимание, вы можете получить значение поля id из атрибутов и, используя это значение, присвоить его переменной, которую вы затем сможете использовать.

Так что у меня может быть что-то такое в моем didStartElement (где атрибуты - это переменная, объявленная в заголовке):

if([elementName isEqualToString:@"Summary"]){
    attributes = attributeDict;
}

Тогда как-то так в моих найденных символах:

if([[attributes valueForKey:@"id"] intValue] == 1){
    doSomething
}else if([[attributes valueForKey:@"id"] intValue] == 2){
    doSomethingElse
}...

и так далее, пока вы не получите все свои данные.

N.B. Это 100% непроверенный код, но я уверен, что он может работать ...

0 голосов
/ 31 июля 2009

Вам нужно будет отслеживать итоговые элементы, которые вы уже проанализировали, сохраняя все значения в некотором контейнере, например в массиве: NSMutableArray. Таким образом, вместо NSString для хранения сводки у вас будет NSMutableArray для хранения списка проанализированных вами сводок.

Всякий раз, когда вы сталкиваетесь со сводкой в ​​вашем парсере, вы не устанавливаете сводку NSString для только что прочитанной строки (которая заменяет старое значение и объясняет, почему вы получаете только последний тег итога). Вместо этого вы сохраняете ее как новую строку и добавляете эту строку в NSMutableArray.

Проблема с дизайном в сообщении блога, на которое вы ссылаетесь, состоит в том, что он использует keyValueCoding для установки свойств в объекте Book, и это не облегчает добавление элементов в элемент массива. Следовательно, вам нужно будет включить в синтаксический анализатор некоторую специальную обработку для элемента summary и добавить в класс Book методы, позволяющие добавлять элементы в массив summary. См. этот пост о том, как это сделать с помощью KVC.

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