Java XML Parsing и исходные смещения байтов

Я хотел бы проанализировать правильно сформированный XML в DOM, но я хотел бы знать смещение тега каждого узла в исходный носитель.

Например, если бы у меня был документ XML с содержимым, похожим на:

<html>
<body>
<div>text</div>
</body>
</html>

I ' Хотелось бы знать, что узел начинается со смещения 13 в исходном носителе и (что более важно), что «текст» начинается со смещения 18.

Возможно ли это со стандартными синтаксическими анализаторами Java XML? JAXB? Если нет простого решения, какие изменения необходимы на пути синтаксического анализа, чтобы сделать это возможным?

9
задан Bill Dwyer 17 August 2010 в 22:05
поделиться

1 ответ

SAX API предоставляет для этого довольно непонятный механизм - интерфейс org.xml.sax.Locator . Когда вы используете SAX API, вы создаете подкласс DefaultHandler и передаете его методам синтаксического анализа SAX, а реализация синтаксического анализатора SAX должна вводить локатор в ваш DefaultHandler ] через setDocumentLocator () . По мере выполнения синтаксического анализа вызываются различные методы обратного вызова на вашем ContentHandler (например, startElement () ), после чего вы можете обратиться к Locator , чтобы узнать позиция синтаксического анализа (через getColumnNumber () и getLineNumber () )

Технически, это необязательная функция, но в документации javadoc говорится, что реализации «настоятельно рекомендуется» предоставлять ее, так что вы, вероятно, можете предположить, что синтаксический анализатор SAX, встроенный в JavaSE, сделает это.

Конечно, это означает использование SAX API, что никому не нравится, но я не вижу способа получить доступ к этой информации с помощью API более высокого уровня.

править: Нашел этот пример .

4
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: