CDATA XML обрезается при разборе - PullRequest
3 голосов
/ 03 августа 2010

Я использую синтаксический анализатор SAX (на Android) для анализа XML-файла из WebService.В некоторых элементах CDATA урезан и не завершен, например, XML-файл содержит данные типа

 <name><![CDATA[Gölsder und Ginck GmbH]]></name> 

, а после синтаксического анализа файла XML с

public void characters(char[] ch, int start, int length)
   throws SAXException {
   super.characters(ch, start, length);
   String text = new String(ch, start, length);

текст содержит только «GölsderУнд Джин "(первые 15 символов).Я отладил его с помощью eclipse, и я вижу, что вся строка не содержится в аргументе «char [] ch» метода.таким образом, сам синтаксический анализ, кажется, имеет ошибку

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

У меня тоже была эта проблема.Дело в том, что метод characters() можно вызывать несколько раз для одного и того же элемента.В вашем случае, если бы вы написали:

public void characters(char[] ch, int start, int length)
   throws SAXException {
   super.characters(ch, start, length);
   String text = new String(ch, start, length);
   Log.d("XMLTEST", text);
}

Вы, вероятно, получите два сообщения журнала, одно Gölsder und Gin и одно ck GmbH.

В заключение вам необходимопеременные-члены, которые вы объединяете при получении новых символов.

0 голосов
/ 28 мая 2015

Это моя работа после прочтения поста Феликса

private String text;

@Override
public void endElement(java.lang.String uri,
                       java.lang.String localName,
                       java.lang.String qName)
        throws SAXException {
       text = null;
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException {
    super.characters(ch, start, length);
    if(text != null){
        text += String.copyValueOf(ch, start, length);
    } else {
        text = String.copyValueOf(ch, start, length);
    }
}
...