`
andy54321
  • 浏览: 435278 次
  • 性别: 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 文件

    NULL 博文链接:https://zhaohong.iteye.com/blog/426761

    java jdom解析xml

    jdom解析xml

    jdom解析xml文件小实例

    jdom解析xml文件小实例jdom解析xml文件小实例jdom解析xml文件小实例

    用jdom解析xml

    这是我做的简单的一个在jsp中用jdom解析xml的程序。只是显示,添加等简单的功能,来学习学习jdom解析xml的程序。如果你想学习那这一定是个很好的例子

    用jdom解析xml文件

    一个关于用jdom解析xml,遍历xml,建立xml的简单例子.

    使用JDOM解析XML文件

    NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547

    jdom解析xml文件

    jdom解析xml文件的源代码、jar包以及示例xml文件

    jdom处理xml例子

    jdom处理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文件的所有节点内容

    Jdom查找XML文件的所有节点内容,一个简单的递归算法

    JDOM操作xml文件的xmlBean

    JDOM 操作xml 解析读取xml文件 修改 删除 增添xml指定节点信息的XmlBean

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

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

    java利用jdom读取xml文件

    利用jdom读取xml 虽然是我自己写的 但是觉得有必要与大家分享一下

    Java实现Jdom生成xml

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

    利用JDOM解析xml文件

    利用JDOM解析xml文件,并根据xml中为类名,生成相应的对象。

    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案例

    Java中使用jdom解析xml的案例, 以及文档说明。

    jdom解析xml、dtd约束xml文件

    这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...

    JDOM创建XML完整实例和jdom-2.0.5.jar

    在工作中发现jdom生成xml标签如&lt;taxML xmlns:xsi="http://www.worg/2001/XMLSchema-instance" xsi:type="Fb1"cnName="附表1" name="Fb1"version="SW5001-2006"&gt; 不能用冒号的问题root.setAttribute("xsi:type", "fb1...

    jdom 解析 XML文件 java程序 存入Oracle数据库

    对于含有子节点的复杂的XML文件,可以采用jdom.jar来解析。 上传的文件包括程序,XML文件,jdom包,jdbc包 对于复杂的XML文件,可以采用层层解析,虽然方法不是很简便,但是,可以完成解析的任务,而且,准确率很高...

Global site tag (gtag.js) - Google Analytics