最近做个swing的xml操作工具。有个功能是要得到某个标签在xml文档中的行号。
最初想是不是java解析xml的四种方法中的一种可以得到行号,就开始翻它们的
api,结果四种里面就sax可以得到行号就是那个locator类了。这种方法不太理想,
我不能想操作jdom或者dom4j中的 文档 对象一样简单的获得我想要的标签。
所以,又翻了翻jdom的源程序,找到了SAXHandler这个类。这个类是jdom解析xml
使用的SAX的解析器。基本上就找到了jdom和SAX的结合处了。利用jdom和SAX结合来
解决这个问题就简单了。
现在开始改造jdom让它符合我们的要求。
1.改造SAXHandler。在SAXHandler中可以看到它实现了很到SAX的接口,基本和
我的功能不相干所以把它们全删掉(记得把它们的方法也删掉)。只留下DefaultHandler
的方法,我们这里只需要关注:
setDocumentLocator(org.xml.sax.Locator locator) ;
startElement(String namespaceURI, String localName,
String qName, Attributes atts)
throws SAXException
第一个方法是SAX传给你的用于记录行号的帮助对象。在SAXHandler建立一个属性将
其保留在该类中。
setDocumentLocator(org.xml.sax.Locator locator) {
this.locator = locator;
super.setDocumentLocator(locator);
}
这样我们就可以得到现在正在解析的行号了。
在看startDocument() ,发现他操作的是jdom中的Element,没办法了因为Element中没
有记录行号的属性我们就没有办法Element记录行号了(那时不可能的的)。接着看第二
步。
2.改造Element。上面说Element不能记录行号,Element的确是不能记录行号。但
是我们想办法让它可以记录行号。我的办法是,新建一个LineNumber类继承自Element
在这个类中添加一个属性lineNumber,用它来记录行号就可以了。
public class LineNumber extends Element {
private int lineNumber;
}
get,set方法一写。ok Element改造完了。
3.在回去开SAXHandler,第一步中说要关注两个方法。但是在哪里只说了setDocumentLocator
没有说另外一个。现在就说怎么改startElement。其实也很简单只要把
element = factory.element(localName, elementNamespace);
改为:
element = new LineNumber(localName, elementNamespace);
((LineNumber)element).setLineNumber(locator.getLineNumber());
好了。
4.接下来就是怎么得到行号了。看代码:
public class JDom {
public static void main(String arge[]) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler hand = new SAXHandler();
sp.parse(new File("F:\\test.xml"), hand);
Document doc = hand.getDocument();
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for (int i = 0; i < allChildren.size(); i++) {
Element a = allChildren.get(x);
System.out.print(a.getName() + ":"
+ a.getText()+" row="+((LineNumber)a).getLineNumber()+"\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
完成。其实只是把jdom的Element的类型转换成LineNumber就可以得到行号了。
好了xml行号可以得到了。在这里只是用了软件工程中的 泛化 的概念。很简单
的实现了需求。
reference url: http://hi.baidu.com/guowei1651/blog/item/a7eb2b0897d561db62d986d9.html
分享到:
相关推荐
JDOM是Java中一个用于处理XML文档的库,它提供了一种高效且方便的方式来创建、读取、修改XML文件。本篇文章将深入探讨如何使用JDOM来读取XML文件。 首先,我们需要了解JDOM的基本概念。JDOM通过构建一棵DOM...
在Java编程中,JDOM(Java Document Object Model)是处理XML的一种库,它提供了方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过...
Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...
**Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...
JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...
**JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...
Java语言在处理XML数据时,常常会用到各种解析库,其中之一便是JDOM。JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理API,它提供了对XML文档结构的完整映射,使得我们可以方便地创建、读取和...
使用JDOM解析XML文件的第一步是创建一个`SAXBuilder`对象,然后通过调用其`build`方法,传入XML文件的输入流,得到一个`Document`对象,该对象代表了整个XML文档。 ```java SAXBuilder sb = new SAXBuilder(); ...
JDOM(Java Document Object Model)是一个用纯Java实现的XML文档对象模型,它为XML处理提供了一种高效、灵活且方便的方法。JDOM的目标是为Java开发者提供一个与平台无关的方式来创建、读取、修改和保存XML文档。...
基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...
`getRootElement()`方法返回XML文档的根元素,通常对应于XML文件的`<root>`标签。你可以通过`Element`对象的`getChild`或`getChildren`方法获取子元素,通过`getAttribute`或`getAttributes`获取属性。 4. 遍历XML...
《JDOM与XML解析:深度比较与应用》 XML(eXtensible Markup Language)是一种通用的数据交换格式,被广泛应用于网络数据交换、配置文件存储等领域。为了方便地解析和操作XML文档,Java社区开发了多种库,其中JDOM...
Java实现Jdom生成解析xml,一般可以用到存储数据。比如我以前做过的ERP系统,权限初始化就用的解析XML,但是现在上传的只是生成XML。如果哪位需要解析XML,留个言。。。。
### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...
JDOM是Java中一个专门用来处理XML的库,它提供了一种高效且方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本...
### JDOM操作XML文件的关键知识点 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,...
Java中的JDOM库是用于解析XML文档的一种强大的工具。它提供了简单、高效的API来读取、修改和创建XML文件。本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML...
3. **读取XML文件**: 使用Builder的`build`方法解析XML文件,得到`Document`对象。 ```java File inputFile = new File("path_to_your_xml_file.xml"); Document document = builder.build(inputFile); ``` 4. ...
org.jdom.adapters包含了与dom适配的java类 org.jdom.filter包含了xml文档的过滤器类 org.jdom.input包含了读取xml文档的类 org.jdom.output包含了写入xml文档的类 org.jdom.transform包含了将jdomxml 文档接口转换...
JDOM是一个专为Java设计的XML处理库,它提供了高效、便捷的方式来创建、修改和读取XML文档。 **JDOM基础** JDOM的主要目标是提供一个完全基于Java的XML解决方案,使得XML文档可以被高效地映射到Java对象上。通过...