2013-04-17 14 views
8

Załóżmy, że mamy dokument XML tak:XmlPullParser: uzyskać tekst wewnętrzną tym znaczników XML

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

Załóżmy, że XmlPullParser jest w znaczniku otwierającym do korzenia. Czy jest przydatna metoda czytania całego tekstu w numerze root do String, podobnego do innerHtml w DOM?

Czy muszę sam napisać metodę narzędzia, która odtwarza analizowany znacznik? To oczywiście wydaje mi się stratą czasu.

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

Obawiam się, że jesteś zobowiązany do napisania własnej funkcji do parsowania danego xml, tak jak chciałeś. – harism

+0

Aw man. :(Może mogę użyć analizy SAX? – Maarten

+0

Jednak myślę, że trzeba samemu zrekonstruować pogrubioną etykietę podczas analizowania danych.Podobnie jak do parsera pobierania, afaik, analizator SAX obsługuje pogrubioną etykietę i nie daje "wewnętrznego xml" . – harism

Odpowiedz

10

Ta metoda powinna go okrywać, ale nie dotyczy znaczników singleton lub przestrzeni nazw.

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; 
} 
Powiązane problemy