Android SAX Parser с образцом символа новой строки? - PullRequest
1 голос
/ 10 апреля 2011

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

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

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

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

Спасибо!

1 Ответ

1 голос
/ 02 мая 2011

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

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 и не смог найти.

...