2012-02-27 1 views
5
<doc> 
<element> 
    text 
    <item> 
    text1 
    </item> 
    <item> 
    text2 
    </item> 
    text3 
</element> 
<element> 
    another text 
</element> 


... 
</doc> 

И я хочу, чтобы извлечь текст в строку, как это:Как извлечь текст из вложенного xml с помощью xmlpullparser в android?

"text text1 text2 text3" 

«предмет» теги вложены в «элемент»

Im используя xmlpullparser в Android, но я мог бы использовать любой другой анализатор если это упростит ситуацию. tx.

+0

Если строки - это все, что вам нужно, почему бы вам не использовать файл strings.xml. Это намного проще. –

+0

Если вы хотите текст без тегов, вы можете использовать String.replace с регулярным выражением или что-то – njzk2

+0

Я не уверен, что вы имеете в виду. strings.xml от android SDK? это сторонний файл, который мне нужно разобрать – butelo

ответ

12

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

void loadXML(XmlPullParser xpp) { 
    int eventType = xpp.next(); 
    while (eventType != XmlPullParser.END_DOCUMENT) { 
     if (eventType == XmlPullParser.START_TAG && 0 == XML_ELEMENT_TAG.compareTo(xpp.getName())) { 
      loadElement(xpp); 
     } 

     eventType = xpp.next(); 
    } 
} 

private void loadElement(XmlPullParser xpp) { 

    int eventType = xpp.getEventType(); 
    if (eventType == XmlPullParser.START_TAG && 0 == XML_ELEMENT_TAG.compareTo(xpp.getName())) { 
     eventType = xpp.next(); 
     while (eventType != XmlPullParser.END_TAG || 0 != XML_ELEMENT_TAG.compareTo(xpp.getName())) { 
      if (eventType == XmlPullParser.START_TAG &&  0 == XML_ITEM_TAG.compareTo(xpp.getName())) { 
       loadItem(xpp); 
      } 

      eventType = xpp.next(); 
     } 
    } 
} 

private void loadItem(XmlPullParser xpp) { 

    int eventType = xpp.getEventType(); 
    if (eventType == XmlPullParser.START_TAG && 0 == XML_ITEM_TAG.compareTo(xpp.getName())) { 

     eventType = xpp.next(); 
     while (eventType != XmlPullParser.END_TAG || 0 != XML_ITEM_TAG.compareTo(xpp.getName())) { 

      // Get attributes. 
      String attr = xpp.getAttributeValue(null, XML_MY_ATTR); 
      String text = null; 

      // Get item text if present. 
      eventType = xpp.next(); 
      while (eventType != XmlPullParser.END_TAG || 0 != XML_ITEM_TAG.compareTo(xpp.getName())) { 
       if (eventType == XmlPullParser.TEXT) { 
        text = xpp.getText(); 
       } 

       eventType = xpp.next(); 
      } 

      eventType = xpp.next(); 
     } 
    } 
} 
+0

Это сработало! Не совсем так из-за моего XML, но достаточно, чтобы поставить меня на ноги. tx много – butelo

-3

Вы имели в виду Android documentation for XMLPullParser? Это довольно легко следовать. Сообщите нам, если это решит вашу проблему.

+0

Я сделал, а также сайт xmlpullparser. Не нашел о вложенных тегах. – butelo

+0

@MikeD Отрицательный. Эта документация непросто следовать за вложенными тегами xml. –

+0

совсем не полезно – pat8719