Я пытаюсь найти способ точно определить номер строки и расположение символов как тегов, так и атрибутов при анализе XML-документа. Я хочу сделать это, чтобы я мог точно сообщить автору документа XML (через веб-интерфейс), где документ недействителен.XML/Java: Точные позиции строк и символов при анализе тегов и атрибутов?
В конечном счете, я хочу, чтобы каретка была в недействительном теге или просто внутри открытой цитаты недействительного атрибута. (Я не использую схему XML в этот момент, потому что точный формат атрибутов имеет значение, которое не может быть проверено только схемой. Возможно, мне даже захочется сообщить некоторые атрибуты как недопустимые частичные значения атрибута. Или аналогично , частично через текст между стартовым и конечным тегом.)
Я пробовал использовать SAX (org.xml.sax) и интерфейс Locator. Это работает до определенной степени, но не достаточно хорошо. Он сообщит только позицию чтения после событие; например, символ сразу после окончания открытого тега, для startElement(). Я не могу просто отчислить длину имени тега, потому что атрибуты, самозакрывающиеся теги и/или новые строки в открытом теге выкинут. (И Locator не предоставляет никакой информации о позиции атрибутов вообще.)
В идеале я хотел использовать подход, основанный на событиях, так как у меня уже есть обработчик SAX, который создает собственное DOM-представление или дальнейшая обработка. Тем не менее, мне было бы интересно узнать о любой DOM или DOM-подобной библиотеке, которая включает в себя точную информацию о местоположении для элементов модели.
Неужели кто-либо решил эту проблему или любой другой, с требуемым уровнем точности?
Подход, основанный на событиях? Как [XMLEventReader] (http://docs.oracle.com/javase/8/docs/api/javax/xml/stream/XMLEventReader.html) и [XMLEvent.getLocation] (http://docs.oracle. ком/JavaSE/8/документы/API/javax/XML/поток/события/XMLEvent.html # getLocation--) метод? – VGR
Я пробовал использовать XMLEventReader, но XMLStreamReader. Однако позиции этих отчетов являются конечной позицией каждого события. Так, например, после START_ELEMENT позиция указана сразу после закрытия стартового тега (note - start tag, а не элемент). Кажется, нет надежного способа определить положение начала тега. Кроме того, я никогда не получаю никаких событий ATTRIBUTE вообще, поскольку они объединены в одно событие START_ELEMENT: поэтому я не могу получить дальнейшую точность в позициях атрибутов. – Paul
Пожалуйста, объясните, что вы имеете в виду, когда говорите, что не используете XML-схему в этот момент, потому что точный формат атрибутов имеет значение, которое не может быть проверено только схемой. * – kjhughes