Возможно, вы захотите посмотреть Locator
, DefaultHandler
и SAXParser
. В качестве примера, который дает номер строки и номер столбца:
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
String xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project \n"+
">\n"+
" <description>A description</description>\n"+
"</project>\n";
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
InputSource inps = new InputSource(new StringReader(xml));
DefaultHandler df = new XDefaultHandler();
sp.parse(inps, df);
}
static class XDefaultHandler extends DefaultHandler {
Locator l = null;
@Override
public void setDocumentLocator(Locator locator) {
l = locator;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("element: " + qName);
System.out.println("locator: " + l.getLineNumber() + "/" + l.getColumnNumber());
}
}
Выходной сигнал является:
element: project
locator: 3/2
element: description
locator: 4/18
Override других методов в XDefaultHandler для приема вызовов для конца элементов и т.д.
EDIT: (слишком рано нажмите кнопку)
Из документации Locator.getLineNumber()
:
Верните номер строки, где заканчивается текущее событие документа. Строки ограничены концами строк, которые определены в спецификации XML.
Предупреждение: возвращаемое значение метода предназначено только в качестве приближения для диагностики; он не предназначен для предоставления достаточной информации для редактирования содержимого символа исходного документа XML. В некоторых случаях эти «строковые» номера соответствуют тому, что будет отображаться в виде столбцов, а в других они могут не соответствовать исходному тексту из-за расширения внутренней сущности.
Возвращаемое значение является приблизительным числом строк в объекте документа или внешним анализируемым объектом, где появляется разметка, инициирующая событие.
Где именно я должен держать счетчик и как его увеличить? Можете ли вы немного разобраться? – user1403565