Разбор 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 & B</n>
производя следующие события:
- начальный узел
n
- текстовый узел "
A
" - текстовый узел "
&
" - текстовый узел "
B
" - конечный узел
n
Теперь, если вы println
каждая персонажа "вещь", которую вы видите, вы получите три строки вместо одной. Может быть, ваш парсер имеет возможность принудительно "нормализовать" события для присоединения к различным текстовым узлам.
(Извините, если я не использую всю соответствующую XML-терминологию. Моя терминология XML немного устарела, поэтому не стесняйтесь редактировать этот вопрос и вводить правильные термины XML. Спасибо)