如何解析字符串类型的xml

思路就是:拿到xml,组装成map,循环取出。

代码如下:

  1 public class XMLPass
  2 {
  3     public static void main(String[] args){
  4         XMLPass doc = new XMLPass();
  5         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
  6         "<memberInfo>"+
  7            "<userType>2</userType>"+
  8            "<member class=\"com.member.MemberImpl\">"+
  9                "<id>1001</id>"+
 10                "<name>zqh</name>"+             
 11            "</member>"+
 12            "<company>"+
 13                "<id>1002</id>"+
 14                "<cc>zqh公司</cc>"+ 
 15                "<dd>sss</dd>"+
 16            "</company>"+
 17         "</memberInfo>"; 
 18         String userType ="";
 19         for(int i =0;i<doc.parse(xml).size();i++)
 20         {
 21          
 22          Map sa = (Map) doc.parse(xml).get(i);
 23          
 24          
 25          if(sa.containsKey("userType"))
 26          {
 27              userType = sa.get("userType").toString();
 28              System.out.println(userType);
 29              continue;
 30          }
 31          
 32          if(userType.equals("1")){
 33              String id = sa.get("id").toString();
 34              String name = sa.get("name").toString();
 35              System.out.println(id);
 36              System.out.println(name);
 37              break;
 38          }
 39          
 40          if(userType.equals("2") && sa.containsKey("cc")){
 41              String id = sa.get("id").toString();
 42              String cc = sa.get("cc").toString();
 43              String cc = sa.get("dd").toString();
 44              System.out.println(id);
 45              System.out.println(cc);
 46              System.out.println(dd);
 47              break;
 48          }
 49          
 50         }
 51         
 52         
 53     }
 54     
 55     /**  
 56      * 解析xml字符串成List<Map>  
 57      *   
 58      * @param String 
 59      * @return List  
 60      */  
 61     public List parse(String xmlDoc) {   
 62         // 创建一个新的字符串   
 63         StringReader xmlString = new StringReader(xmlDoc);   
 64         // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入   
 65         InputSource source = new InputSource(xmlString);   
 66         // 创建一个新的SAXBuilder   
 67         SAXBuilder saxb = new SAXBuilder();   
 68       
 69         List result = null;   
 70         try {   
 71             result = new ArrayList();   
 72             // 通过输入源构造一个Document   
 73             Document doc = saxb.build(source);   
 74             // 取的根元素   
 75             Element root = doc.getRootElement();   
 76       
 77             // 得到根元素所有子元素的集合   
 78             List node = root.getChildren();   
 79             Element et = null;   
 80             for (int i = 0; i < node.size(); i++) { 
 81                 Map map = new HashMap(); 
 82                 et = (Element) node.get(i);// 循环依次得到子元素   
 83                
 84                 if(et.getChildren().size()==0){
 85                     map.put(et.getName(), et.getText()); // 装入到Map中     
 86                     result.add(map);
 87                     continue;
 88                 }
 89                
 90                 List subNode = et.getChildren(); // 得到内层子节点    
 91                 Element subEt = null;   
 92                 for (int j = 0; j < subNode.size(); j++) {   
 93                     subEt = (Element) subNode.get(j); // 循环依次得到子元素   
 94                     map.put(subEt.getName(), subEt.getText()); // 装入到Map中   
 95                 }   
 96       
 97                 // Map获取到值时才装入   
 98                 if (map.size() > 0)   
 99                     result.add(map);   
100             }   
101         } catch (JDOMException e) {   
102             e.printStackTrace();   
103         } catch (IOException e) {   
104             e.printStackTrace();   
105         }   
106         return result;   
107     }  
108 }

 

posted @ 2015-01-31 22:04  ZQH005  阅读(714)  评论(0编辑  收藏  举报