Более эффективный поиск дочернего узла в XMLPullParser 2.1.10

Я использую XMLPullParser в java для анализа одного файла xml с большим количеством вложенных дочерних узлов следующим образом.

<pt>
   <a>85</a>
   <B>03</B>
     <pd>
         <g>
            <most>155</most>
         </g>
        <e>407</e>
     </pd>
</pt>

Я не очень хорошо знаком с API. Таким образом, использование большого количества методов next() для экземпляра XmlPullParser очень плохо для поиска одного дочернего узла, такого как "самый". Может ли кто-нибудь помочь мне найти дочерний узел более эффективным способом, используя XMLPullParser.


person abhijit nag    schedule 23.05.2013    source источник


Ответы (1)


Если вы ищете более эффективный способ использования XmlPullParser для синтаксического анализа, боюсь, его нет. Например, в JavaScript вы можете «напрямую» получить доступ к элементу, указав его идентификатор, что кажется намного более эффективным. Но в этом случае ваш браузер уже проанализировал все дерево DOM и пометил идентификаторы для будущего использования.

Насколько я понимаю, XmlPullParser выполняет синтаксический анализ «на лету», что означает, что когда вы достигаете целевого узла с помощью методов «next()», это первый раз, когда он читается. Таким образом, нет другого способа получить к нему прямой доступ. Кроме того, я считаю, что интерфейс XmlPullParser не определяет никакого метода для перехода к какому-либо разделу документа.

Однако, если вам действительно нужно повысить производительность, вы можете предварительно обработать файл xml перед его разбором, удалив, например, некоторые части файла, которые не должны быть полезны. В зависимости от того, что вы делаете, предварительная обработка простого текста может быть намного быстрее, чем синтаксический анализ XML; но также есть большая вероятность, что вы сломаете свой документ, сделав это.

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

person personne3000    schedule 23.05.2013
comment
Спасибо большое personne3000 за подробное и важное объяснение. - person abhijit nag; 23.05.2013
comment
Добро пожаловать! если вы считаете, что это полностью отвечает на ваш вопрос, не забудьте принять ответ. - person personne3000; 23.05.2013