Android SAX Parser with newline character sample?

2019-08-09 08:17发布

问题:

I have a PHP webservice that returns an XML output, and one of the Tag contains a multiline "\n" String data.

My problem is, all "\n" is being removed after I pass the XML data through the default SAX parser, but I really dont want this to happen! I want to retain all newline "\n" characters within the Tag so that I can extract it and display them in a simple TextView or EditText.

I tried a couple of workarounds like substituting the "\n" with "&x#dA;" or something, but I cant get it to work properly with my PHP server, and I feel its not an elegant solution.

Does anyone have a working example or tutorial you can point me to learn how to resolve this? I read in another post here that this is the "lmitation" of the implementation of thsi default SAX parser, but I dont mind using a third part parser if thats gonna solve it, but I will need some guidance...

Thanks!

回答1:

I had the same problem as you. I found this solution to a similar problem and adapted it to this one.

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();

Where str is your string with \n characters. There is probably a more elegant solution to this problem, but I am quite new to java and Android and couldn't find one.