Android SAX Parser с образцом символа новой строки?

У меня есть веб-служба PHP, которая возвращает вывод XML, а один из тегов содержит многострочные данные "\n" String.

Моя проблема в том, что все "\n" удаляются после того, как я передаю данные XML через синтаксический анализатор SAX по умолчанию, но я действительно не хочу, чтобы это произошло! Я хочу сохранить все символы новой строки "\n" в теге, чтобы я мог извлечь его и отобразить в простом TextView или EditText.

Я попробовал пару обходных путей, таких как замена "\n" на "&x#dA;" или что-то в этом роде, но я не могу заставить его работать должным образом с моим PHP-сервером, и я считаю, что это не элегантное решение.

У кого-нибудь есть рабочий пример или учебник, который вы можете указать мне, чтобы узнать, как решить эту проблему? Я читал в другом посте здесь, что это «имитация» реализации парсера SAX по умолчанию, но я не возражаю против использования парсера третьей части, если это решит эту проблему, но мне понадобится некоторое руководство...

Спасибо!


person kolslorr    schedule 10.04.2011    source источник


Ответы (1)


У меня была такая же проблема, как у вас. Я нашел это решение к аналогичной задаче и адаптировал его к этой.

StringBuffer sb = new StringBuffer(str.length());

CharacterIterator it = new StringCharacterIterator(str);
for (char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
    switch (ch) {
        case '\\':
            char next = str.charAt(it.getIndex() + 1);
            if (next == 'n') {
                // we've found a newline character
                sb.append('\n');
            } else {
                sb.append(ch);
            }
            break;
        case 'n':
            char prev = str.charAt(it.getIndex() - 1);
            if (prev == '\\') {
                // don't append the 'n', we did that above
            } else {
                sb.append(ch);
            }
            break;
        default:
            sb.append(ch);
            break;
    }
}

str = sb.toString();

Где str — ваша строка с \n символами. Вероятно, есть более элегантное решение этой проблемы, но я новичок в java и Android и не смог его найти.

person Vestride    schedule 02.05.2011