思路就是:拿到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 }