2010-02-01 1 views
1

У меня возникла проблема с производительностью с использованием парсера XML с iphone sdk. Я попытался использовать анализатор LibXML напрямую и NSXMLParser, но у меня были те же результаты. Теперь я ищу что-то, что может улучшить производительность синтаксического анализа. Перемещение атрибутов в вложенные элементы может сделать его быстрее?iPhone SDK XML Атрибут Parsing VS Вложенные элементы

Я получил исходный файл XML так:

 
<Events> 
<Event Name="Test1" Description="Desc" Cat="Cate" Date="20/01/2010" ImageURL="" /> 

</Events> 

Должен ли я создать вложенное дерево? Такие, как folliwing? Улучшает ли производительность?

 
<Events> 
<Event> 
    <Name>Test1</Name> 
    <Description>A description</Description> 
    <Date>20/01/2010</Date> 
    <ImageURL>http://remoteurl.../foo.png</ImageURL> 
</Event> 
</Events> 

Thx много, Paolo

+0

Я обнаружил, что он может повысить производительность. – SlowTree

+0

Прочтите этот блог http://codesofa.com/blog/archive/2008/07/23/make-nsxmlparser-your-friend.html Надеюсь, это может вам помочь .. –

ответ

1

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

Предположим, у вас есть файл, как это:

<document> 

<person> 
    <name>bob</name> 
    <phone>555-5555</phone> 
    <vehicle> 
    <color>blue</color> 
    <type>truck</truck> 
    </vehicle> 
</person> 

<person> 
    <name>jan</name> 
    <phone>444-5555</phone> 
    <vehicle> 
    <color>red</color> 
    <type>car</truck> 
    </vehicle> 
</person> 

</document> 

При ударе человека тег, позволяет предположить, ваш будет создать объект человека. Таким образом, вы создаете объект person, и вы позволяете ему анализировать xml внутри тегов person. Вы делаете это, сделав человека объектом нового делегата объекта. Когда объект объекта обнаруживает тег закрывающего лица, он может сбросить делегат. Я также пошел вперед и повторно вызвал тот же метод в исходном делетете. Я получил эту идею от here. Вы также можете следовать и делать то же самое для тега транспортного средства. Я уверен, что вы можете понять, во что я сейчас веду.

Причина, по которой я думаю, что это повышает эффективность, заключается в том, что вместо создания стека элементов, а также возврата в стек (например, когда вы видите, что человек проверяет, есть ли у вас в документе это). Я предполагаю, что вы можете просто предположить, когда вы видите тег человека, который у вас есть в человеке, но если вы хотите быть в безопасности, проверка важна. Также этот способ более модульный. Я думаю, из-за сокращение в строке сравнивается производительность улучшится. Его также более элегантно кодировать.

Если это не тот ответ, который вы ищете, можете ли вы предоставить небольшую деталь. Спасибо и счастлив.