竹里館→憶童年

          獨坐幽篁里,彈琴復長嘯;深林人不知,明月來相照
          posts - 9, comments - 23, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理

          JDOM解析XML字符串(非XML文檔)

          Posted on 2007-07-20 13:13 憶童年 閱讀(7444) 評論(4)  編輯  收藏 所屬分類: XML and WebService

          這是我最近做項目時遇到的問題
             我是通過JMS機制獲得Topic的消息其消息格式是XML.本想將其寫成XML文檔再通過JDOM讀取.但考慮到實際開發中消息傳遞頻繁就放棄了該思路.最終采取了直接對其分析的方式,這樣就必須對取得的TextMessage做處理
             如下是我通過JDOM方式將得到的TextMessage(XML格式)進行解析的過程:

          package cmo.shubai.jdom;

          import java.io.IOException;
          import java.io.StringReader;
          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;
          import org.xml.sax.InputSource;

          public class DuXMLDoc {
              
          public List xmlElements(String xmlDoc) {
                  
          //創建一個新的字符串
                  StringReader read = new StringReader(xmlDoc);
                  
          //創建新的輸入源SAX 解析器將使用 InputSource 對象來確定如何讀取 XML 輸入
                  InputSource source = new InputSource(read);
                  
          //創建一個新的SAXBuilder
                  SAXBuilder sb = new SAXBuilder();
                  
          try {
                      
          //通過輸入源構造一個Document
                      Document doc = sb.build(source);
                      
          //取的根元素
                      Element root = doc.getRootElement();
                      System.out.println(root.getName());
          //輸出根元素的名稱(測試)
                      
          //得到根元素所有子元素的集合
                      List jiedian = root.getChildren();
                      
          //獲得XML中的命名空間(XML中未定義可不寫)
                      Namespace ns = root.getNamespace();
                      Element et 
          = null;
                      
          for(int i=0;i<jiedian.size();i++){
                          et 
          = (Element) jiedian.get(i);//循環依次得到子元素
                          /*
                           * 無命名空間定義時
                           * et.getChild("users_id").getText();
                           * et.getChild("users_address",ns).getText()
                           
          */

                          System.out.println(et.getChild(
          "users_id",ns).getText());
                          System.out.println(et.getChild(
          "users_address",ns).getText());
                      }

                      
          /*
                       * 如要取<row>下的子元素的名稱
                       
          */

                      et 
          = (Element) jiedian.get(0);
                      List zjiedian 
          = et.getChildren();
                      
          for(int j=0;j<zjiedian.size();j++){
                          Element xet 
          = (Element) zjiedian.get(j);
                          System.out.println(xet.getName());
                      }

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

                  
          return null;
              }

              
          public static void main(String[] args){
                  DuXMLDoc doc 
          = new DuXMLDoc();
                  String xml 
          = "<?xml version=\"1.0\" encoding=\"gb2312\"?>"+
                  
          "<Result xmlns=\"http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">"+
                     "<row resultcount=\"1\">"+
                        
          "<users_id>1001     </users_id>"+
                        
          "<users_name>wangwei   </users_name>"+
                        
          "<users_group>80        </users_group>"+
                        
          "<users_address>1001號   </users_address>"+
                     
          "</row>"+
                     
          "<row resultcount=\"1\">"+
                        
          "<users_id>1002     </users_id>"+
                        
          "<users_name>wangwei   </users_name>"+
                        
          "<users_group>80        </users_group>"+
                        
          "<users_address>1002號   </users_address>"+
                     
          "</row>"+
                  
          "</Result>";
                  doc.xmlElements(xml);
              }

          }


          以上的例子和實際稍有出入-這個例子主要是用來演示JDOM解析XML字符串
          關于JDOM對XML文檔的解析可看JDOM處理帶Namespace的XML文件

          評論

          # re: JDOM解析XML字符串(非XML文檔)  回復  更多評論   

          2007-07-20 16:36 by sitinspring
          讓我想起了寒冬做JMS的歲月.

          # re: JDOM解析XML字符串(非XML文檔)  回復  更多評論   

          2007-10-17 17:09 by xb
          thank you

          # re: JDOM解析XML字符串(非XML文檔)  回復  更多評論   

          2008-10-30 16:01 by 戰斗中的人
          非常感謝你的文章

          # re: JDOM解析XML字符串(非XML文檔)  回復  更多評論   

          2010-11-08 14:29 by www
          thank you~~

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 浪卡子县| 堆龙德庆县| 井研县| 和林格尔县| 柘城县| 乌拉特中旗| 北碚区| 武强县| 新干县| 泾阳县| 保定市| 黑龙江省| 滁州市| 曲阜市| 东莞市| 香格里拉县| 南涧| 星座| 张家口市| 通化县| 元江| 河池市| 毕节市| 郑州市| 沙河市| 弋阳县| 集安市| 宜州市| 吴江市| 贡嘎县| 吉林省| 佛山市| 新民市| 拉萨市| 佳木斯市| 道孚县| 沧源| 久治县| 刚察县| 五寨县| 古交市|