怎么用java获取一个XML文档的行数,并能在某一行写入文字? 5
1个回答
展开全部
参考链接:http://www.zhihu.com/question/20846718/answer/24033030
jdom中有元素行号的信息。具体做法是:1.修改SAXHandler, 将其实现的借口和方法全部去掉,只留下DefaultHandler的方法。我们只需要关注setDocumentLocator(org.xml.sax.Locator locator) ;和startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException 这2个方法。其中第一个方法中的locator中包含了行号信息。2.修改Element,原始的Element中不包含行号属性,需要新建一个类ElementWithLineNumber承Element. public class ElementWithLineNumber extends Element { private int lineNumber;}3. 修改第一步中提到的第二个方法。以jdom2.0.5为例,将:final Element element = currentLocator == null ? factory.element(localName, namespace) : factory.element(currentLocator.getLineNumber(), currentLocator.getColumnNumber(), localName, namespace);修改为: final Element element = new ElementWithLineNumber(localName, namespace); ((ElementWithLineNumber)element).setLineNumber(currentLocator.getLineNumber());4.调用:try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); SAXHandler hand = new SAXHandler(); sp.parse( new File( "c:\\workspace\\eclipse\\TestXmlCompare\\xmlCompareConfig.xml"), hand); Document doc = hand.getDocument(); Element foo = doc.getRootElement(); List<Element> allChildren = foo.getChildren(); for (int i = 0; i < allChildren.size(); i++) { Element a = (Element) allChildren.get(i); System.out.print(a.getName() + ":" + a.getText() + " row=" + ((ElementWithLineNumber) a).getLineNumber() + "\n"); } } catch (Exception e) { e.printStackTrace(); }希望可以帮到你。
jdom中有元素行号的信息。具体做法是:1.修改SAXHandler, 将其实现的借口和方法全部去掉,只留下DefaultHandler的方法。我们只需要关注setDocumentLocator(org.xml.sax.Locator locator) ;和startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException 这2个方法。其中第一个方法中的locator中包含了行号信息。2.修改Element,原始的Element中不包含行号属性,需要新建一个类ElementWithLineNumber承Element. public class ElementWithLineNumber extends Element { private int lineNumber;}3. 修改第一步中提到的第二个方法。以jdom2.0.5为例,将:final Element element = currentLocator == null ? factory.element(localName, namespace) : factory.element(currentLocator.getLineNumber(), currentLocator.getColumnNumber(), localName, namespace);修改为: final Element element = new ElementWithLineNumber(localName, namespace); ((ElementWithLineNumber)element).setLineNumber(currentLocator.getLineNumber());4.调用:try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); SAXHandler hand = new SAXHandler(); sp.parse( new File( "c:\\workspace\\eclipse\\TestXmlCompare\\xmlCompareConfig.xml"), hand); Document doc = hand.getDocument(); Element foo = doc.getRootElement(); List<Element> allChildren = foo.getChildren(); for (int i = 0; i < allChildren.size(); i++) { Element a = (Element) allChildren.get(i); System.out.print(a.getName() + ":" + a.getText() + " row=" + ((ElementWithLineNumber) a).getLineNumber() + "\n"); } } catch (Exception e) { e.printStackTrace(); }希望可以帮到你。
追问
我想知道怎么获取或写入具体某一行的信息
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |