2013-04-17 2 views
8

Предположим, у вас есть XML-документ, как так:XmlPullParser: получить внутренний текст, включая XML теги

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

Пусть XmlPullParser на открывающем теге для корня. Есть ли удобный способ читать весь текст в пределах root до String, вроде innerHtml в DOM?

Или мне нужно написать утилиту самостоятельно, чтобы воссоздать анализируемый тег? Это, конечно, кажется пустой тратой времени для меня.

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

Я боюсь, что вы обязаны написать свою собственную функцию для синтаксического анализа данного xml, как вы хотели. – harism

+0

Aw человек. :(Может быть, я могу использовать синтаксический анализ SAX, хотя? – Maarten

+0

Но я думаю, что вы должны сами реконструировать жирный тег при анализе данных. Подобно тому, как вытягивать парсер, afaik, SAX-парсер справляется с жирным тегом и не дает вам «внутренний xml», , – harism

ответ

10

Этот метод должен покрывать его, но не имеет дело с одноточечными тегами или пространствами имен.

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; 
} 
Смежные вопросы