2012-04-26 5 views
0

У меня есть xml, который я анализирую, есть поле, которое содержит очень длинный текст, но почему-то оно отбрасывается парсером, потому что я использую только строку для получить этот символ, чтобы я использовал строковый буфер или строитель. Я хочу только извлечь значение по тегу.Android SAX XML Parser с String или Stringbuilder или Stringbuffer

@Override 
public void characters(char[] ch, int start, int length) 
throws SAXException { 

    if (elementOn) { 
    // its not reading element value, though tag is read. 
     elementValue = new String(ch, start, length); 
     elementOn = false; 
    } 
} 

Это текст:

<description> 
    <![CDATA[ 
    Former CPI MLA Manish Kunjam, who returned on Thursday after, theis is a long long text very long that its being dropped.......so what can be done................................................................................................... 
    ]]> 
</description> 

Благодаря плз наставит меня .....

ответ

2

Да, использовать StringBuilder, так как текст может быть прочитан на куски, и вы можете читать только первая пустая строка кода. См documentation

Вы можете переустанавливать StringBuilder каждый раз, когда вы попали startElement

private final StringBuilder mStringBuilder = new StringBuilder(); 
private String elementValue = null; 
private boolean elementOn = false; 

public final void characters(char[] ch, int start, int length) throws SAXException { 
    if (elementOn) 
     mStringBuilder.append(ch, start, length); 
} 

public final void startElement(String uri, String localName, String qName, Attributes attributes) 
     throws SAXException { 
    mStringBuilder.setLength(0); 
    if (someCondition) elementOn = true; 
} 

public void endElement(String uri, String localName, String qName) throws SAXException { 
    elementValue = mStringBuilder.toString().trim(); 
    elementOn = false; 
} 

Parser делает примерно следующий

<description> -> startElement("description"), reset StringBuilder 
    <![CDATA[ -> characters(""), appended to (empty) String 
    Former CPI.. -> characters("Former.."), appended 
    ]]>   -> characters(""), appended 
</description> -> endElement("description"), read text here 
<description> -> startElement("description"), reset StringBuilder all starts again 
+0

Да, но это даст мне длинную строку, содержащую все теги ... ..в любом пути я могу получить только отдельные теги только ... – Programmer

+0

он должен дать вам только содержимое одного элемента, так как он сбрасывает StringBuilder каждый раз, когда запускается новый элемент. – zapl