隨筆-72  評論-63  文章-0  trackbacks-0
          ???Element類的getContent()方法返回一個List對象,它包括了一個元素的所有內容:注釋、屬性、處理指令、文本和子元素。利用它我們可以遍歷XML文檔。下面的程序來自《java語言與xml教程》
          import?org.jdom.*;
          import?org.jdom.input.SAXBuilder;
          import?java.io.IOException;
          import?java.util.*;

          public?class?TreePrinter{
          ???public?static?void?process(Element?element){
          ??????inspect(element);
          ??????List?content=element.getContent();//取元素的所有內容
          ??????Iterator?iterator=content.iterator();
          ??????while(iterator.hasNext()){
          ?????????Object?o=iterator.next();
          ?????????if(o?instanceof?Element){//如果是子元素
          ?????????????Element?child=(Element)o;
          ?????????????process(child);//遞歸調用
          ?????????}else?if(o?instanceof?Comment){//如果是說明
          ?????????????Comment?c=(Comment)o;
          ?????????????//System.out.println(c.getText());
          ????????????//?System.out.println();
          ??????}
          ???}

          ???public?static?void?inspect(Element?element){
          ????????if(!element.isRootElement()){
          ???????????System.out.println();
          ????????}

          ????????String?qualifiedName=element.getQualifiedName();
          ????????System.out.println(qualifiedName+":"+element.getText());
          ????????Namespace?namespace=element.getNamespace();
          ????????if(namespace!=Namespace.NO_NAMESPACE){
          ?????????????String?localName=element.getName();
          ?????????????String?uri=element.getNamespaceURI();
          ?????????????String?prefix=element.getNamespacePrefix();
          ?????????????System.out.println("??Local?name:?"+localName);
          ?????????????System.out.println("??Namespace?URI:?"+uri);
          ?????????????if(!"".equals(prefix)){
          ???????????????????System.out.println("??Namespace?prefix:?"+prefix);
          ?????????????}
          ?????????}

          ???????List?attributes=element.getAttributes();
          ???????if(!attributes.isEmpty()){
          ????????????Iterator?iterator=attributes.iterator();
          ????????????while(iterator.hasNext()){
          ???????????????Attribute?attribute=(Attribute)iterator.next();
          ???????????????String?name=attribute.getName();
          ???????????????String?value=attribute.getValue();
          ???????????????Namespace?attributeNamespace=attribute.getNamespace();
          ???????????????if(attributeNamespace==Namespace.NO_NAMESPACE){
          ?????????????????System.out.println("??"+name+?"=\""+value+?"\"");
          ???????????????}else{
          ?????????????????String?prefix=attributeNamespace.getPrefix();
          ?????????????????System.out.println("??"+prefix+":"+name+"=\""+value+"\"");
          ???????????????}
          ?????????????}
          ?????????}

          ?????????List?namespaces=element.getAdditionalNamespaces();
          ?????????if(!namespaces.isEmpty()){
          ????????????Iterator?iterator=namespaces.iterator();
          ????????????while(iterator.hasNext()){
          ????????????????Namespace?additional=(Namespace)iterator.next();
          ????????????????String?uri=additional.getURI();
          ????????????????String?prefix=additional.getPrefix();
          ????????????????System.out.println("??xmlns:"+prefix+"=\""+uri+"\"");
          ?????????????}
          ??????????}
          ????}

          ???????public?static?void?main(String[]?args){
          ?????????if(args.length<=0){
          ????????????System.out.println("Usage:?java?TreePrinter?URL");
          ????????????return;
          ??????????}
          ?????????String?url=args[0];
          ?????????try{
          ??????????????SAXBuilder?parser=new?SAXBuilder();
          ??????????????Document?document=parser.build(url);
          ??????????????process(document.getRootElement());
          ????????}catch(JDOMException?e){
          ??????????????System.out.println(url+"?is?not?well-formed.");
          ????????}catch(IOException?e){
          ??????????????System.out.println("Due?to?an?IOException,the?parser?could?not?encode?"+url);
          ????????}
          ??????}
          ?}

          ???運行結果:

          C:\java>java???TreePrinter?sample.xml
          HD:
          ??xmlns:dd="http://www.zzjava.hnzz.net"
          ??xmlns:ss="http://www.hnzz.net"
          disk:
          ??name="C"
          capacity:8G
          directories:200
          files:1580
          disk:
          ??name="D"
          capacity:10G
          directories:500
          files:3000

          用的xml文件是:
          <?xml?version="1.0"?encoding="UTF-8"?>
          <HD?xmlns:dd="http://www.zzjava.hnzz.net"??xmlns:ss="http://www.hnzz.net"?>
          ????????<disk?name="C">
          ????????????????<capacity>8G</capacity>
          ????????????????<directories>200</directories>
          ????????????????<files>1580</files>
          ????????</disk>

          ????????<disk?name="D">
          ????????????????<capacity>10G?<!--good-->
          ????????????????</capacity>
          ????????????????<directories>500</directories>
          ????????????????<files>3000</files>
          ????????</disk>
          </HD>

          http://blog.iyi.cn/start/2005/01/javaxml.html
          http://toney.cnblogs.com/archive/2004/11/20/66178.aspx
          posted on 2006-06-20 15:18 船長 閱讀(1509) 評論(1)  編輯  收藏 所屬分類: J2EE

          評論:
          # re: 用JDOM遍歷xml文檔 2009-05-06 16:54 | shang
          瘋狂的船長,若是我想讀出xml用表格的方式顯示出來,比如顯示出一份財務報表,應該怎么寫?  回復  更多評論
            
          主站蜘蛛池模板: 乐亭县| 富锦市| 大田县| 三门峡市| 湖南省| 甘南县| 洛扎县| 绥化市| 南陵县| 禹州市| 巫溪县| 凉城县| 桦川县| 霍林郭勒市| 遵义市| 湄潭县| 始兴县| 西充县| 宜城市| 绥化市| 石家庄市| 都兰县| 修文县| 凤阳县| 景宁| 宜兰县| 蓬溪县| 潞城市| 双牌县| 原平市| 恩平市| 通榆县| 宣恩县| 金坛市| 汤阴县| 泽普县| 高雄市| 翼城县| 太谷县| 丹东市| 新乐市|