SAX XML Java Entities проблема - PullRequest
       1

SAX XML Java Entities проблема

3 голосов
/ 29 декабря 2010

У меня проблема с SAX и Java .

Я анализирую xml-файл базы данных цифровой библиотеки dblp (в котором перечислены журналы, конференции, статьи). Файл XML очень большой (> 700 МБ).

Однако моя проблема заключается в том, что при возврате символов () обратного вызова, если полученная строка содержит несколько сущностей , метод возвращает только строку, начинающуюся с последних символов сущности обнаруж .

т.е.: R&uuml;diger Mecke - это оригинальное имя автора, заключенное между <author> тегами

üdiger Mecke является результатом

(строка возвращается из символов (ch [], начало, длина) метод).

Хотелось бы знать:

  1. как запретить PArser автоматически разрешать сущности?
  2. как решить проблему усеченных символов, описанную ранее?

Ответы [ 2 ]

4 голосов
/ 19 марта 2011

characters() не гарантируется возврат всех символов за один вызов.Из Javadoc:

Парсер вызовет этот метод, чтобы сообщить о каждом фрагменте символьных данных.Синтаксические анализаторы SAX могут возвращать все смежные символьные данные в одном чанке или разделять их на несколько чанков.

Вам необходимо добавить символы, возвращаемые во всех вызовах, например:

private StringBuffer tempValue = new StringBuffer();

startElement()
{
    tempValue.setLength(0); // clear buffer...
}

characters(characters(char[] ch, int start, int length)
{
    tempValue.append(ch, start, length); // append to buffer
}

endElement()
{
    String value = tempValue.toString(); // use characters in buffer...
}
2 голосов
/ 29 декабря 2010
  1. Я не думаю, что вы можете отключить разрешение объекта.

  2. Метод символов можно вызывать несколько раз для одного тега, и вам придетсясобирайте символы по нескольким вызовам, а не ожидайте, что все они придут одновременно.

...