Разбор XML в строке изменения Java

Я делаю приложение для чата через smack api. Когда я отправляю сообщение, которое включает этот символ ', выход приходит как

сообщение == мэм

выход ==

мама

'

я

вот код

  StringEscapeUtils.unescapeHtml((new String(ch, start, length).replace("'", "`").replace("'", "'")));

вот код

DefaultHandler handler = new DefaultHandler() {
                @Override
                public void startDocument() throws SAXException {
                }

                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {                        
                        for (int i = 0; i < attributes.getLength(); i++) {
                            if (attributes.getLocalName(i).equalsIgnoreCase("from")) {
                                from = attributes.getValue(i);
                                break;
                            }
                        }                        
                   ....
                }

                @Override
                public void characters(char ch[], int start, int length) throws SAXException {
                    String str = StringEscapeUtils.unescapeHtml((new String(ch, start, length)));                    
                    switch (elementType) {
                        case 1:
                            msg = str;
                            break;
                     ...
                        default:
                           ...
                            break;
                    }
//                  

                @Override
                public void endElement(String uri, String localName, String qName) throws SAXException {
                }

                @Override
                public void endDocument() throws SAXException {
                }

1 ответ

Решение

Очень часто анализаторы XML разбивают текстовые элементы на несколько символьных узлов. Это совершенно верно с точки зрения XML. Таким образом, вам нужно будет справиться с этим соответствующим образом. Так что, возможно, проблема возникает из-за печати, а не из-за ее отсутствия.

Например, я могу представить себе следующий XML

<n>A &amp; B</n>

производя следующие события:

  1. начальный узел n
  2. текстовый узел "A"
  3. текстовый узел "&amp;"
  4. текстовый узел "B"
  5. конечный узел n

Теперь, если вы println каждая персонажа "вещь", которую вы видите, вы получите три строки вместо одной. Может быть, ваш парсер имеет возможность принудительно "нормализовать" события для присоединения к различным текстовым узлам.

(Извините, если я не использую всю соответствующую XML-терминологию. Моя терминология XML немного устарела, поэтому не стесняйтесь редактировать этот вопрос и вводить правильные термины XML. Спасибо)

Другие вопросы по тегам