Санитарная обработка потока KML для изменения пространства имен xml - PullRequest
0 голосов
/ 08 октября 2009

При анализе KML, создаваемом Google Планета Земля с использованием совместимого синтаксического анализатора, наблюдается странное поведение JAK . Ожидаемое пространство имен для синтаксического анализатора не записывается как правильное в производственной системе GE Kml, и при чтении этого KML обратно в другое приложение Java происходит сбой.

Мы возимся с потоком, когда он читается, и заменяем вхождения любого другого пространства имен на правильное пространство имен. Это нужно сделать только один раз в начале файла. Попытка подхода заключалась в том, чтобы проанализировать в первых нескольких строках строку, выполнить поиск и замену, создать поток строк и объединить «остаток» FileInputStream со StringStream с помощью SequenceInputStream. Это, однако, не работает. Любые идеи будут оценены.

Вот с чего начинается фрагмент KML xmlns:

<code>
    <kml xmlns="http://earth.google.com/kml/2.2">
</code>

и вот что мы хотим заменить:

<code>
    <kml xmlns="http://www.opengis.net/kml/2.2">
</code>

Поток последовательности возвращает ошибочное доступное значение (только для 1-го потока в последовательности), что приводит к сбою синтаксического анализатора.

1 Ответ

1 голос
/ 09 октября 2009

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

Вместо SequenceInputStream вы должны использовать StringBuffer для чтения файла и внесения любых необходимых изменений по мере чтения данных. StringBuffer повышает производительность добавления строковых объектов. Выполните синтаксический анализ метода StringBuffer.toString () для StringStream, если в конце требуется вывод потока.

...