2014-12-17 3 views
1

Я использую Java саксофоне парсер и я переопределитьJava саксофон анализатор ошибка

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    value = new String(ch, start, length); 

в некотором случае массив содержит ч QName элемента, но не содержит все значения.

Пример:

ch = [... , x, s, d, :, n, a, m, e, >, 1, 2, 3] 

но реальное значение XSD: имя 123456789

EDIT

String responseString = Utils.getXml(url); 

SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser saxParser = factory.newSAXParser(); 
handler = new SimpleHandler(); 
saxParser.parse(new InputSource(new StringReader(responseString)), handler); 

List<Entit> list = handler.getList(); 

У меня есть XML, как это (конечно оригинальный XML намного больше)

<root> 
    <el> 
    <xsd:name>11111111</xsd:name> 
    </el> 
    <el> 
    <xsd:name>22222222</xsd:name> 
    </el> 
    <el> 
    <xsd:name>123456789</xsd:name> 
    </el> 
    <el> 
    <xsd:name>333333333</xsd:name> 
    </el> 
</root> 

Я получаю ошибку только за одно значение в xml.

Как исправить это.

+2

Можете ли вы предоставить код, вызывающий парсер и соответствующий XML-документ? – SirRichie

+0

Можно ли сказать, что ваш общий вопрос: «** Как получить значение элемента« '? **"? –

+0

Нет, я так не думаю. Я получаю значения на других xmls. Итак, я думаю, что это некоторая ошибка в парсе java sax. – user3714967

ответ

9

Метод characters делает не обязательно возвращает набор символов всего. Вы должны сохранить результат каждый раз characters называется, что-то вроде:

final StringBuilder sb = new StringBuilder(); 

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    sb.append(ch, start, length); 
} 

Затем нужно сбросить ваш StringBuilder (или что вы используете), когда вы найдете конечный тег элемента или начать тег элемента или любой другой дело может быть.

Прочитайте спецификацию characters:

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

Как правило, вам нужно удалить текстовый буфер, если вы видите startElement или endElement. Обычно вы будете делать что-то с текущим буфером, когда они будут видны.

Смежные вопросы