2013-05-28 2 views
1

EDIT 1:Как вы анализируете теги XML, которые встроены в себя, в android?

Я начал экспериментировать с XmlPullParser, и я имею в виду, чтобы справиться с dicts внутри dicts (Это звучит так, я знаю), я мог бы использовать рекурсии как readDict (XmlPullParser) и называть его всякий раз, когда я сталкиваюсь с элементом dict.

Это может работать с простым классом модели dict, содержащим список объектов HashMap.

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

ORIGINAL ВОПРОС:

Есть андроид библиотека, которая позволяет парсинг XML в следующем виде?

<dict> 
    <key>..</key> 
    <string>..</string> 
    <key> 
    <array> 
     <dict> 
     <key> 
     <string> 
     <key> 
     <array> 
      <dict> 
       <key> 
       <string> 
      </dict> 
      <dict>...</dict> 
      <dict>...</dict> 
     </array> 
     </dict> 
    </array> 
</dict> 

Полный XML-файл можно найти по адресу: http://www.tsn.ca/config/iphone/TSNiphoneconfig.xml

Проблема:

Как вы можете видеть, некоторые теги встроены "в" самих. Это первый раз, когда я это вижу.

Я посмотрел в SAX Parser Factory, XML парсер и ** Android SIMPLE библиотека **. То, что я действительно ищу, это библиотека , которую я могу использовать для синтаксического анализа XML, как SIMPLE, и разрешить мне создавать файлы модели данных, соответствующие элементам XML.

Однако, если я не могу использовать библиотеку, как бы я начал разбирать этот уникальный XML-файл с помощью XML Pull Parser, например?

+0

что означают слова «вставляются» внутри «самих себя»?do u хотите разобрать тег? – Abhishek

+0

Ну, диктат, содержащий другой dict - значит, у дикта может быть ребенок dict. – ryvianstyron

ответ

0

Таким образом, лучшим решением этой проблемы, которое я мог бы придумать, является простое использование рекурсии. Напишите методы для разбора каждого тега отдельно и передайте в XMLPullParser в качестве параметра.

Так вот некоторые псевдокод:

parseArray(XmlPullParser xmlpp) 
{ 
    // require start and end tags 
    if you hit another tag, call its corresponding method 
} 

Таким образом, если вы в parseDict и ударил Dict тег, вы можете просто вызвать parseDict снова().

До тех пор, пока вы захватываете свои данные и устанавливаете их в какую-то модель данных, не имеет значения, что dict встроен внутри dict повторно, потому что ваша модель данных будет работать в любом случае.

0

Если и просто хочет проанализировать данные внутри «Словарь» (я имею в виду встроенного «ДИКТ» это не зависит от родителей «Словарь»), то и нет необходимости рекурсии logic.U может просто сделать так:

int eventType = xpp.getEventType(); //xpp is reference of XmlPullParser 
while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 
       if (xpp.getName().equalsIgnoreCase("dict")) { 
        //do something 
       } 
eventType = xpp.next(); 
      } 

Всякий раз, когда анализируется «dict», он попадает в ту же петлю.

 Смежные вопросы

  • Нет связанных вопросов^_^