竹里館→憶童年

          獨(dú)坐幽篁里,彈琴?gòu)?fù)長(zhǎng)嘯;深林人不知,明月來(lái)相照
          posts - 9, comments - 23, trackbacks - 0, articles - 0
             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理

          JDOM解析這樣的XML文件

          Posted on 2007-07-20 17:31 憶童年 閱讀(1467) 評(píng)論(2)  編輯  收藏 所屬分類: XML and WebService

          這幾天在開(kāi)發(fā)中遇到的問(wèn)題
          XML文檔內(nèi)容

           1<?xml version="1.0" encoding="GB2312"?>
           2<Result xmlns="http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out">
           3   <query>select * from users where users_id='11111'</query>
           4   <row resultcount="1">
           5      <column name="users_id" type="CHAR">11111     </column>
           6      <column name="users_name" type="CHAR">wangwei   </column>
           7      <column name="users_group" type="CHAR">80        </column>
           8      <column name="users_address" type="CHAR">11111號(hào)   </column>
           9   </row>
          10   <row resultcount="1">
          11      <column name="users_id" type="CHAR">11111     </column>
          12      <column name="users_name" type="CHAR">wangwei   </column>
          13      <column name="users_group" type="CHAR">80        </column>
          14      <column name="users_address" type="CHAR">11111號(hào)   </column>
          15   </row>
          16</Result>

          本人遇到的問(wèn)題是在<row></row>下的子元素名稱相同如上第5,6,7,8行.這時(shí)當(dāng)用JDOM通過(guò)如下代碼獲取時(shí)

          package com.xml;

          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;
          import java.util.List;

          import org.jdom.Document;
          import org.jdom.Element;
          import org.jdom.JDOMException;
          import org.jdom.Namespace;
          import org.jdom.input.SAXBuilder;

          public class DuXMLTest2 {
              
          public void loadXMLdoc(){
                  FileInputStream fi 
          = null;
                  
          try {
                      fi 
          = new FileInputStream("Test2.xml");
                      SAXBuilder sb 
          = new SAXBuilder();
                      
          try {
                          Document doc 
          = sb.build(fi);
                          Element root 
          = doc.getRootElement();
                          Namespace ns 
          = root.getNamespace();
                          List jiedian 
          = root.getChildren();
                          Element et 
          = (Element) jiedian.get(1);
                          
          //System.out.println(et.getName());
                          List zjiedian = et.getChildren();
                          Element xet 
          = null;
                          String value[] 
          = new String[zjiedian.size()];
                          
          for(int i=0;i<jiedian.size()-1;i++){
                              xet 
          = (Element) jiedian.get(i+1);
                              
          for(int j=0;j<zjiedian.size();j++){
                                  value[j]
          =xet.getChild("column",ns).getText();
                                  System.out.println(value[j]);
                              }

                          }

                      }
           catch (JDOMException e) {
                          
          // TODO 自動(dòng)生成 catch 塊
                          e.printStackTrace();
                      }
           catch (IOException e) {
                          
          // TODO 自動(dòng)生成 catch 塊
                          e.printStackTrace();
                      }

                  }
           catch (FileNotFoundException e) {
                      
          // TODO 自動(dòng)生成 catch 塊
                      e.printStackTrace();
                  }

              }

              
          public static void main(String[] args){
                  DuXMLTest2 dt 
          = new DuXMLTest2();
                  dt.loadXMLdoc();
              }

          }

          通過(guò)上面的代碼運(yùn)行時(shí)產(chǎn)生的結(jié)果都只取屬性name="users_id"的元素的值即顯示的內(nèi)容都為11111.看到這結(jié)果當(dāng)時(shí)都快暈了,馬上要吃中午飯搞出這么個(gè)問(wèn)題. 哎先吃飯吧
          誰(shuí)叫"人是鐵飯是鋼呢".吃飯回來(lái)就開(kāi)始在網(wǎng)上查資料找了半天沒(méi)的.看來(lái)只有靠自己了,打開(kāi)JDOM的API文檔一個(gè)個(gè)方法往過(guò)看(E文我哭啊),最后終于找到了

          在Element類下有一個(gè)getContent(int index)方法
          public Content getContent(int index)其方法的意思是Returns the child at the given index.
          然后我又打開(kāi)Content 類在其中找到getValue() 方法
          public abstract java.lang.String getValue()其方法的意思是Returns the XPath 1.0 string value of this child

          看到這我興奮了,不管三七二十一我就燒黃紙砍豬頭想和getContent兄和getValue兄結(jié)為兄弟. 我對(duì)你們的崇拜有如滔滔江山....................... 啊!跑題了
          從新更改過(guò)的代碼
          package com.xml;

          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;
          import java.util.List;

          import org.jdom.Document;
          import org.jdom.Element;
          import org.jdom.JDOMException;
          import org.jdom.Namespace;
          import org.jdom.input.SAXBuilder;

          public class DuXMLTest2 {
              
          public void loadXMLdoc(){
                  FileInputStream fi 
          = null;
                  
          try {
                      fi 
          = new FileInputStream("Test2.xml");
                      SAXBuilder sb 
          = new SAXBuilder();
                      
          try {
                          Document doc 
          = sb.build(fi);
                          Element root 
          = doc.getRootElement();
                          Namespace ns 
          = root.getNamespace();
                          List jiedian 
          = root.getChildren();
                          Element et 
          = (Element) jiedian.get(1);
                          
          //System.out.println(et.getName());
                          List zjiedian = et.getChildren();
                          
          int x = zjiedian.size();
                          
          //System.out.println(x);
                          String value[] = new String[x];
                          Element xet 
          = null;
                          
          for(int i=0;i<jiedian.size()-1;i++){
                              xet 
          = (Element) jiedian.get(i+1);
                              
          //System.out.println(xet.getName());
                              for(int j=0;j<zjiedian.size();j++){
                                  value[j]
          =xet.getContent(j).getValue();
                                  System.out.print(value[j]);
                              }

                          }

                      }
           catch (JDOMException e) {
                          
          // TODO 自動(dòng)生成 catch 塊
                          e.printStackTrace();
                      }
           catch (IOException e) {
                          
          // TODO 自動(dòng)生成 catch 塊
                          e.printStackTrace();
                      }

                  }
           catch (FileNotFoundException e) {
                      
          // TODO 自動(dòng)生成 catch 塊
                      e.printStackTrace();
                  }

              }

              
          public static void main(String[] args){
                  DuXMLTest2 dt 
          = new DuXMLTest2();
                  dt.loadXMLdoc();
              }

          }


          評(píng)論

          # re: JDOM解析這樣的XML文件  回復(fù)  更多評(píng)論   

          2007-08-07 21:52 by linjx2000
          文章寫太復(fù)雜了, jdom本來(lái)不需要那么復(fù)雜, 是你自己把他搞復(fù)雜了!
          for(int i=0;i<jiedian.size()-1;i++){
          xet = (Element) jiedian.get(i+1);
          //System.out.println(xet.getName());
          for(int j=0;j<zjiedian.size();j++){
          value[j]=xet.getContent(j).getValue();
          System.out.print(value[j]);
          }
          }

          這段代碼, 換成
          for (int i = 0; i < jd2.size(); i++) {
          xet = (Element) jd2.get(i);
          value[i] =xet.getText();
          }
          就可以獲得需要的四個(gè)column屬性值了,你寫的還會(huì)有問(wèn)題!

          交流請(qǐng)加入群: 37998636

          # re: JDOM解析這樣的XML文件  回復(fù)  更多評(píng)論   

          2007-08-07 21:59 by linjx2000
          不好意思,

          換成的代碼里面,jd2----按你代碼的樣子應(yīng)該改成--->zjiedian


          交流請(qǐng)加入群: 37998636(JavaStudy)


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 郴州市| 四川省| 乌兰县| 年辖:市辖区| 平原县| 邛崃市| 益阳市| 三原县| 恩施市| 阳信县| 和顺县| 泸州市| 休宁县| 海晏县| 林州市| 额济纳旗| 类乌齐县| 宁波市| 祁连县| 城市| 连城县| 连州市| 青海省| 巴彦淖尔市| 墨竹工卡县| 呼伦贝尔市| 松溪县| 巩义市| 兰考县| 江门市| 玉林市| 轮台县| 浑源县| 军事| 玉龙| 广河县| 仁布县| 沂源县| 武川县| 宣汉县| 亳州市|