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


... 
</doc> 

Và tôi muốn trích xuất văn bản đến một chuỗi như thế này:Làm thế nào để trích xuất văn bản từ một xml lồng nhau bằng cách sử dụng xmlpullparser trong android?

"text text1 text2 text3" 

"mục" thẻ được lồng vào bên trong "yếu tố"

Im sử dụng XmlPullParser trong Android nhưng tôi có thể sử dụng bất kỳ phân tích cú pháp khác nếu nó làm mọi thứ dễ dàng hơn. tx.

+0

Nếu chuỗi là tất cả những gì bạn đang theo dõi, tại sao bạn không chỉ sử dụng tệp strings.xml. Nó đơn giản hơn rất nhiều. –

+0

nếu bạn muốn văn bản không có thẻ, bạn có thể sử dụng String.replace với một regex hoặc một cái gì đó – njzk2

+0

Tôi không chắc chắn về ý của bạn. strings.xml từ Android SDK? đây là tệp của bên thứ ba mà tôi cần phân tích – butelo

Trả lời

12

Tôi phân tích các tệp xml tương tự. Đây là một ví dụ. Bạn sẽ cần phải thêm kiểm tra lỗi khi thích hợp.

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

Đã hoạt động! Không chính xác như thế này vì XML của tôi, nhưng đủ để đưa tôi vào đôi chân của riêng tôi. tx rất nhiều – butelo

-3

Bạn đã xem qua số Android documentation for XMLPullParser chưa? Nó khá dễ làm theo. Hãy cho chúng tôi biết nếu điều đó giải quyết được vấn đề của bạn.

+0

Tôi đã làm và cũng là trang web xmlpullparser. Không tìm thấy thẻ lồng nhau. – butelo

+0

@MikeD Phủ định. Tài liệu đó không dễ làm theo cho các thẻ xml lồng nhau. –

+0

không hữu ích ở tất cả – pat8719

Các vấn đề liên quan