package test; import java.util.Iterator; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.DefaultJDOMFactory; import org.jdom.input.JDOMFactory; import org.jdom.input.SAXBuilder; import org.jdom.input.SAXHandler; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; /** * @author Per Norrman * */ public class LineTest { public static void main(String[] args) throws Exception { String file = "data.xml"; SAXBuilder builder = new MySAXBuilder(); builder.setFactory(new MyFactory()); Document doc = builder.build(file); for (Iterator iter = JDOMTreeWalker.Elements(doc); iter.hasNext();) { LineElement e = (LineElement) iter.next(); System.out.println(e.getName() + ": " + e.getStartLine() + " -- " + e.getEndLine()); } } } class MySAXBuilder extends SAXBuilder { /** override */ protected SAXHandler createContentHandler() { return new MySAXHandler(new MyFactory()); } } class MySAXHandler extends SAXHandler { public MySAXHandler(JDOMFactory f) { super(f); } /** override */ public void startElement( String arg0, String arg1, String arg2, Attributes arg3) throws SAXException { super.startElement(arg0, arg1, arg2, arg3); Locator l = getDocumentLocator(); if (l != null) { ((LineElement)getCurrentElement()).setStartLine(l.getLineNumber()); } } /** override */ public void endElement(String arg0, String arg1, String arg2) throws SAXException { Locator l = getDocumentLocator(); if (l != null) { ((LineElement)getCurrentElement()).setEndLine(l.getLineNumber()); } super.endElement(arg0, arg1, arg2); } } class MyFactory extends DefaultJDOMFactory { public Element element(String name) { return new LineElement(name); } } class LineElement extends Element { private int _startLine; private int _endLine; public LineElement(String name) { super(name); } public int getEndLine() { return _endLine; } public int getStartLine() { return _startLine; } public void setEndLine(int i) { _endLine = i; } public void setStartLine(int i) { _startLine = i; } }