2013-04-17 10 views
8

bir XML belge şöyle olduğunu varsayalım XML etiketleri de dahil olmak üzere iç metin olsun:XmlPullParser:

<root> 
    That was a <b boldness="very">very bold</b> move. 
</root> 

XmlPullParser kökü için açılış etikette varsayalım. root içinde String içindeki tüm metni DOM'da innerHtml türünde okumak için kullanışlı bir yöntem var mı? Veya ayrıştırılan etiketi yeniden yaratan bir yardımcı program yöntemi yazmak zorunda mıyım? Bu elbette bana zaman kaybı gibi görünüyor.

String myDesiredString = "That was a <b boldness=\"very\">very bold</b> move." 
+1

Korkarım ki istediğin gibi xml'yi ayrıştırmak için kendi işlevini yazman gerekiyor. – harism

+0

Aw man. :(Belki de SAX ayrıştırma kullanabilirim? – Maarten

+0

Yine de ayrıştırma yaparken veriyi ayrıştırırken bold etiketini yeniden yazmanız gerekir.Aynı şekilde ayrıştırıcıyı afaik, SAX ayrıştırıcısı kalın etiketi işlemez ve size "iç xml" vermez . – harism

cevap

10

Bu yöntem, onu kapsamalıdır, ancak tekil etiketlerle veya ad alanlarıyla ilgilenmez.

public static String getInnerXml(XmlPullParser parser) 
     throws XmlPullParserException, IOException { 
    StringBuilder sb = new StringBuilder(); 
    int depth = 1; 
    while (depth != 0) { 
     switch (parser.next()) { 
     case XmlPullParser.END_TAG: 
      depth--; 
      if (depth > 0) { 
       sb.append("</" + parser.getName() + ">"); 
      } 
      break; 
     case XmlPullParser.START_TAG: 
      depth++; 
      StringBuilder attrs = new StringBuilder(); 
      for (int i = 0; i < parser.getAttributeCount(); i++) { 
       attrs.append(parser.getAttributeName(i) + "=\"" 
         + parser.getAttributeValue(i) + "\" "); 
      } 
      sb.append("<" + parser.getName() + " " + attrs.toString() + ">"); 
      break; 
     default: 
      sb.append(parser.getText()); 
      break; 
     } 
    } 
    String content = sb.toString(); 
    return content; 
}