Scala XML pull-парсер и местоположение - PullRequest
3 голосов
/ 19 апреля 2011

Меня попросили написать утилиту для поиска большого количества файлов XML для элементов с отсутствующим атрибутом.Ответственный отдел не может просто сделать атрибут обязательным в DTD, потому что он сломает сотни файлов.Они хотят редактировать их вручную в течение нескольких дней / недель.

Я пишу небольшой инструмент командной строки в Scala 2.8.1.Я буду использовать синтаксический анализатор «pull», чтобы сохранить чистоту функционального программирования своего кода и запустить его многопоточным.API, предоставленный в Java 6 (javax.xml.stream. XMLStreamReader), имеет метод (getLocation()), который возвращает номер строки события.Я могу использовать это для написания сообщений, информирующих пользователя о том, где искать отсутствующий атрибут.

Я бы предпочел использовать синтаксический анализатор в scala.xml.pull.XMLEventReader, но он не предоставляет информацию о местоположении.*

Я что-то упустил?Это где-то еще в Scala API?

1 Ответ

3 голосов
/ 19 апреля 2011

Насколько я вижу, это не обеспечивается API XMLEventReader.

Он опирается на io.Source и может предоставлять доступ к местоположению, но не предоставляет.Я не вижу простого способа обойти это, поскольку объект, имеющий доступ к позиции, является личным.

Возможно, вы захотите сделать свою собственную копию XMLEventReader, которая производиткастом XMLEvent с позицией.Методом изменения будет override def elemStart, который имеет доступ к позиции и может генерировать еще один EvPos(line:Int, column:Int) после каждого EvElemStart.

. Вы также можете рассмотреть возможность использования 2.9.RC1, поскольку исправлены некоторые ошибки, связанные с производительностью.

...