dom4j解析xml字符串实例
先来看看dom4j中对应XML的DOM树建立的继承关系
针对于XML标准定义,对应于图2-1列出的内容,dom4j提供了以下实现:
同时,dom4j的NodeType枚举实现了XML规范中定义的node类型。如此可以在遍历xml文档的时候通过常量来判断节点类型了。
常用API
classorg.dom4j.io.SAXReader
- read
提供多种读取xml文件的方式,返回一个Domcument对象
interfaceorg.dom4j.Document
- iterator
使用此法获取node - getRootElement
获取根节点
interfaceorg.dom4j.Node
- getName
获取node名字,例如获取根节点名称为bookstore - getNodeType
获取node类型常量值,例如获取到bookstore类型为1——Element - getNodeTypeName
获取node类型名称,例如获取到的bookstore类型名称为Element
interfaceorg.dom4j.Element
- attributes
返回该元素的属性列表 - attributeValue
根据传入的属性名获取属性值 - elementIterator
返回包含子元素的迭代器 - elements
返回包含子元素的列表
interfaceorg.dom4j.Attribute
- getName
获取属性名 - getValue
获取属性值
interfaceorg.dom4j.Text
- getText
获取Text节点值
interfaceorg.dom4j.CDATA
- getText
获取CDATA Section值
interfaceorg.dom4j.Comment
- getText
获取注释
实例一:
1 //先加入dom4j.jar包 2 import java.util.HashMap; 3 import java.util.Iterator; 4 import java.util.Map; 5 6 import org.dom4j.Document; 7 import org.dom4j.DocumentException; 8 import org.dom4j.DocumentHelper; 9 import org.dom4j.Element; 10 11 19 public class TestDom4j { 20 21 public void readStringXml(String xml) { 22 Document doc = null; 23 try { 24 25 // 读取并解析XML文档 26 // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 27 // 28 // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 29 // Document document = reader.read(new File("User.hbm.xml")); 30 // 下面的是通过解析xml字符串的 31 doc = DocumentHelper.parseText(xml); // 将字符串转为XML 32 33 Element rootElt = doc.getRootElement(); // 获取根节点 34 System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称 35 36 Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head 37 38 // 遍历head节点 39 while (iter.hasNext()) { 40 41 Element recordEle = (Element) iter.next(); 42 String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值 43 System.out.println("title:" + title); 44 45 Iterator iters = recordEle.elementIterator("script"); // 获取子节点head下的子节点script 46 47 // 遍历Header节点下的Response节点 48 while (iters.hasNext()) { 49 50 Element itemEle = (Element) iters.next(); 51 52 String username = itemEle.elementTextTrim("username"); // 拿到head下的子节点script下的字节点username的值 53 String password = itemEle.elementTextTrim("password"); 54 55 System.out.println("username:" + username); 56 System.out.println("password:" + password); 57 } 58 } 59 Iterator iterss = rootElt.elementIterator("body"); ///获取根节点下的子节点body 60 // 遍历body节点 61 while (iterss.hasNext()) { 62 63 Element recordEless = (Element) iterss.next(); 64 String result = recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值 65 System.out.println("result:" + result); 66 67 Iterator itersElIterator = recordEless.elementIterator("form"); // 获取子节点body下的子节点form 68 // 遍历Header节点下的Response节点 69 while (itersElIterator.hasNext()) { 70 71 Element itemEle = (Element) itersElIterator.next(); 72 73 String banlce = itemEle.elementTextTrim("banlce"); // 拿到body下的子节点form下的字节点banlce的值 74 String subID = itemEle.elementTextTrim("subID"); 75 76 System.out.println("banlce:" + banlce); 77 System.out.println("subID:" + subID); 78 } 79 } 80 } catch (DocumentException e) { 81 e.printStackTrace(); 82 83 } catch (Exception e) { 84 e.printStackTrace(); 85 86 } 87 } 88 89 94 public static Map readStringXmlOut(String xml) { 95 Map map = new HashMap(); 96 Document doc = null; 97 try { 98 // 将字符串转为XML 99 doc = DocumentHelper.parseText(xml); 100 // 获取根节点 101 Element rootElt = doc.getRootElement(); 102 // 拿到根节点的名称 103 System.out.println("根节点:" + rootElt.getName()); 104 105 // 获取根节点下的子节点head 106 Iterator iter = rootElt.elementIterator("head"); 107 // 遍历head节点 108 while (iter.hasNext()) { 109 110 Element recordEle = (Element) iter.next(); 111 // 拿到head节点下的子节点title值 112 String title = recordEle.elementTextTrim("title"); 113 System.out.println("title:" + title); 114 map.put("title", title); 115 // 获取子节点head下的子节点script 116 Iterator iters = recordEle.elementIterator("script"); 117 // 遍历Header节点下的Response节点 118 while (iters.hasNext()) { 119 Element itemEle = (Element) iters.next(); 120 // 拿到head下的子节点script下的字节点username的值 121 String username = itemEle.elementTextTrim("username"); 122 String password = itemEle.elementTextTrim("password"); 123 124 System.out.println("username:" + username); 125 System.out.println("password:" + password); 126 map.put("username", username); 127 map.put("password", password); 128 } 129 } 130 131 //获取根节点下的子节点body 132 Iterator iterss = rootElt.elementIterator("body"); 133 // 遍历body节点 134 while (iterss.hasNext()) { 135 Element recordEless = (Element) iterss.next(); 136 // 拿到body节点下的子节点result值 137 String result = recordEless.elementTextTrim("result"); 138 System.out.println("result:" + result); 139 // 获取子节点body下的子节点form 140 Iterator itersElIterator = recordEless.elementIterator("form"); 141 // 遍历Header节点下的Response节点 142 while (itersElIterator.hasNext()) { 143 Element itemEle = (Element) itersElIterator.next(); 144 // 拿到body下的子节点form下的字节点banlce的值 145 String banlce = itemEle.elementTextTrim("banlce"); 146 String subID = itemEle.elementTextTrim("subID"); 147 148 System.out.println("banlce:" + banlce); 149 System.out.println("subID:" + subID); 150 map.put("result", result); 151 map.put("banlce", banlce); 152 map.put("subID", subID); 153 } 154 } 155 } catch (DocumentException e) { 156 e.printStackTrace(); 157 } catch (Exception e) { 158 e.printStackTrace(); 159 } 160 return map; 161 } 162 163 public static void main(String[] args) { 164 165 // 下面是需要解析的xml字符串例子 166 String xmlString = "" + "" + "" 167+ " 169+ "" + "0" + "" 170+ "1000" + "36242519880716" 171+ "" + "" + "" ; 172 173 176Map map = readStringXmlOut(xmlString); 177Iterator iters = map.keySet().iterator(); 178 while (iters.hasNext()) { 179String key = iters.next().toString(); // 拿到键 180String val = map.get(key).toString(); // 拿到值 181System.out.println(key + "=" + val); 182 } 183 } 184 185}
实例二: