`
andy54321
  • 浏览: 441491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[转]jdom得到xml标签行号

阅读更多
      最近做个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 读取XML 文件

    JDOM是Java中一个用于处理XML文档的库,它提供了一种高效且方便的方式来创建、读取、修改XML文件。本篇文章将深入探讨如何使用JDOM来读取XML文件。 首先,我们需要了解JDOM的基本概念。JDOM通过构建一棵DOM...

    使用JDOM解析XML文件

    在Java编程中,JDOM(Java Document Object Model)是处理XML的一种库,它提供了方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    用jdom解析xml

    **Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...

    用jdom解析xml文件

    JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...

    jdom解析xml文件

    **JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...

    java利用jdom读取xml文件

    Java语言在处理XML数据时,常常会用到各种解析库,其中之一便是JDOM。JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理API,它提供了对XML文档结构的完整映射,使得我们可以方便地创建、读取和...

    Jdom查找XML文件的所有节点内容

    使用JDOM解析XML文件的第一步是创建一个`SAXBuilder`对象,然后通过调用其`build`方法,传入XML文件的输入流,得到一个`Document`对象,该对象代表了整个XML文档。 ```java SAXBuilder sb = new SAXBuilder(); ...

    jdom处理xml例子

    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的开发源码-用jdom解析xml.zip 基于java的开发...

    JDOM解析xml文档实例(自己编写,仅供参考)

    `getRootElement()`方法返回XML文档的根元素,通常对应于XML文件的`&lt;root&gt;`标签。你可以通过`Element`对象的`getChild`或`getChildren`方法获取子元素,通过`getAttribute`或`getAttributes`获取属性。 4. 遍历XML...

    jdom_xml.rar_jdom_xml

    《JDOM与XML解析:深度比较与应用》 XML(eXtensible Markup Language)是一种通用的数据交换格式,被广泛应用于网络数据交换、配置文件存储等领域。为了方便地解析和操作XML文档,Java社区开发了多种库,其中JDOM...

    Java实现Jdom生成xml

    Java实现Jdom生成解析xml,一般可以用到存储数据。比如我以前做过的ERP系统,权限初始化就用的解析XML,但是现在上传的只是生成XML。如果哪位需要解析XML,留个言。。。。

    jdom解析XML文件and把字符串解析成XML

    ### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...

    利用JDOM解析xml文件

    JDOM是Java中一个专门用来处理XML的库,它提供了一种高效且方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本...

    JDOM操作xml文件的xmlBean

    ### JDOM操作XML文件的关键知识点 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,...

    java利用jdom解析xml文件

    Java中的JDOM库是用于解析XML文档的一种强大的工具。它提供了简单、高效的API来读取、修改和创建XML文件。本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML...

    Jdom解析xml案例

    3. **读取XML文件**: 使用Builder的`build`方法解析XML文件,得到`Document`对象。 ```java File inputFile = new File("path_to_your_xml_file.xml"); Document document = builder.build(inputFile); ``` 4. ...

    jdom1.1.3xml解析工具类

    org.jdom.adapters包含了与dom适配的java类 org.jdom.filter包含了xml文档的过滤器类 org.jdom.input包含了读取xml文档的类 org.jdom.output包含了写入xml文档的类 org.jdom.transform包含了将jdomxml 文档接口转换...

    Jdom解析XML

    JDOM是一个专为Java设计的XML处理库,它提供了高效、便捷的方式来创建、修改和读取XML文档。 **JDOM基础** JDOM的主要目标是提供一个完全基于Java的XML解决方案,使得XML文档可以被高效地映射到Java对象上。通过...

Global site tag (gtag.js) - Google Analytics