Я предполагаю, что, вероятно, нет удовлетворительного ответа на этот вопрос, но я все равно прошу, если я что-то пропустил.
В принципе, я хочу узнать строку в исходном документе, из которого возник какой-либо элемент XML, с учетом экземпляра элемента. Я хочу, чтобы это было только для улучшения диагностических сообщений об ошибках - XML является частью файла конфигурации, и если с ним что-то не так, я хочу, чтобы он мог указать читателю сообщения об ошибке точно в нужное место в документе XML поэтому он может исправить ошибку.
Я понимаю, что стандартная поддержка XML Scala, вероятно, не имеет встроенной функции, подобной этой. В конце концов, было бы расточительно аннотировать каждый экземпляр NodeSeq
такой информацией, и не каждый XML-элемент даже имел исходный документ, с которого он был разобран. Мне кажется, что стандартный Scala синтаксический анализатор XML выводит данные строки, а затем нет способа получить его.
Но переключение на другую структуру XML не является вариантом. Добавление другой зависимости библиотеки "только" для улучшения сообщений об ошибках диагностики представляется мне неуместным. Кроме того, несмотря на некоторые недостатки, мне очень нравится встроенная поддержка сопоставления шаблонов для XML.
Моя единственная надежда заключается в том, что вы можете показать мне способ изменить или подклассифицировать стандартный парсер XML Scala так, чтобы создаваемые им узлы были аннотированы с номером строки источника. Может быть, для этого может быть создан специальный подкласс NodeSeq
. Или, может быть, только Atom
можно подклассифицировать, потому что NodeSeq
слишком динамичен? Я не знаю.
В любом случае, мои надежды близки к нулю. Я не думаю, что в парсере есть место, где мы можем подключиться, чтобы изменить способ создания узлов, и что в этом месте доступна информация о линии. Тем не менее, я задаюсь вопросом, почему я раньше этого не задавал. Пожалуйста, укажите мне оригинал, если это дубликат.