Разбор nsxmlparser один за другим? - PullRequest
0 голосов
/ 30 января 2012

Как выполнить синтаксический анализ вложенных узлов с помощью NSXMLParser. Поскольку известно, что этот синтаксический анализатор разбирает XML по узлам, как мы должны обрабатывать несколько узлов с одинаковыми именами, как показано ниже:

<data>
    <nodesame attrisame="this is same">
         <nodesame> this is also same </nodesame>
         <nodedifferent> this is different although </nodedifferent>
    </nodesame>
</data>

Выше у нас есть узел основных данных, который содержит узел-узел, внутри которого находится другой узел-узел. Пожалуйста, скажите мне, как различать оба узла в разных контекстах.

Пожалуйста, предложите мне хороший способ получить словарь / массив от делегата:

parser:didEndElement:namespaceURI:qualifiedName

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

1 Ответ

0 голосов
/ 30 января 2012

Когда вы используете nsxmlparser, он идет сверху вниз и вызывает совпадающие пары didStartElement и didEndElement.Итак, для вашего первого вопроса (как узнать, когда вы находитесь в дочернем узле с тем же именем, что и родительский узел?), Ответ должен отслеживать, когда был вызван didStartElement, а затем еще один didStartElement изто же имя узла без вызова didEndElement между ними.

Теперь каждый элемент назван так, что массив на самом деле не применим для общего анализа.Это возможно только в ответе JSON.Итак, ваш второй вопрос (как создать массив или словарь xml?) - разрешить каждому узлу быть собственным словарем, возможно, с ключом «атрибутов», который является другим словарем.Я хотел бы создать что-то вроде этого для вашего примера:

{"data":
    {"nodesame":
        {"attributes":
             {"attrisame":"this is same"}
        }, {"nodesame":
               {"text":"this is also same"}
        }, {"nodedifferent":
               {"text":"this is different although"}
        }
    }
}

Одна из проблем здесь занимает слова «атрибуты» и «текст», так что это не очень хорошее решение.

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