包含DB连接信息的XML文件
1 <!--示例1——三级显示--> 2 <db-connections> 3 <connection> 4 <name>DBTest</name> 5 <jndi></jndi> 6 <url> 7 <![CDATA[jdbc:MySQL://localhost:3306/db_test?useUnicode=true&characterEncoding=UTF8]]> 8 </url> 9 <driver>org.gjt.mm.mysql.Driver</driver>10 <user>test</user>11 <passWord>test2012</password>12 <max-active>10</max-active>13 <max-idle>10</max-idle>14 <min-idle>2</min-idle>15 <max-wait>10</max-wait>16 <validation-query>SELECT 1+1</validation-query>17 </connection>18 </db-connections>db-connections.xml
节点属性XML文件
1 <!--示例2——节点属性--> 2 <bookstore> 3 <book category="cooking"> 4 <title lang="en">Everyday Italian</title> 5 <author>Giada De Laurentiis</author> 6 <year>2005</year> 7 <PRice>30.00</price> 8 </book> 9 <book category="children" title="Harry Potter" author="J K. Rowling" year="2005" price="$29.9"/>10 </bookstore>bookstore.xml
解析代码:
1 package xml; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.util.ArrayList; 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.List; 9 import java.util.Map;10 11 import org.dom4j.Attribute;12 import org.dom4j.Document;13 import org.dom4j.Element;14 import org.dom4j.io.SAXReader;15 16 public class TestDom4j2 {17 18 /**19 * 解析包含有DB连接信息的XML文件20 * 格式必须符合如下规范:21 * 1. 最多三级,每级的node名称自定义;22 * 2. 二级节点支持节点属性,属性将被视作子节点;23 * 3. CDATA必须包含在节点中,不能单独出现。24 */25 public static List<Map<String, String>> parseDBXML(String configFile) throws Exception {26 List<Map<String, String>> dbConnections = new ArrayList<Map<String, String>>();27 //从JAVA的项目路径中去查询文件,文件必须在src源码包路径下才可以使用该方法28 //InputStream is = TestDom4j2.class.getResourceAsStream(configFile);29 30 //从盘符中获取xml文件的内容31 FileInputStream is = new FileInputStream(new File(configFile));32 SAXReader saxReader = new SAXReader();33 Document document = saxReader.read(is);34 //获取根节点db-connections或bookstore35 Element connections = document.getRootElement();36 37 Iterator<Element> rootIter = connections.elementIterator();38 while (rootIter.hasNext()) {39 Element connection = rootIter.next();40 Iterator<Element> childIter = connection.elementIterator();41 42 Map<String, String> connectionInfo = new HashMap<String, String>();43 //获取connection或book节点的所有属性44 List<Attribute> attributes = connection.attributes();45 //遍历节点属性46 for (int i = 0; i < attributes.size(); ++i) { 47 //添加节点属性值48 connectionInfo.put(attributes.get(i).getName(), attributes.get(i).getValue());49 }50 //遍历connection或book的子节点51 while (childIter.hasNext()) { 52 //添加子节点53 Element attr = childIter.next();54 connectionInfo.put(attr.getName().trim(), attr.getText().trim());55 }56 dbConnections.add(connectionInfo);57 }58 return dbConnections;59 }60 61 public static void main(String[] args) {62 try {63 List<Map<String, String>> dbList= parseDBXML("E://xml//db-connections.xml");64 System.out.println("URL=" + dbList.get(0).get("url"));65 66 System.out.println();67 68 List<Map<String, String>> list= parseDBXML("E://xml//bookstore.xml");69 for(int i=0;i<list.size();i++){70 System.out.println("title=" + list.get(i).get("title"));71 System.out.println("author=" + list.get(i).get("author"));72 System.out.println("year=" + list.get(i).get("year"));73 System.out.println("price=" + list.get(i).get("price"));74 }75 } catch (Exception e) {76 e.printStackTrace();77 }78 }79 }
运行结果:
URL=jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=UTF8title=Everyday Italianauthor=Giada De Laurentiisyear=2005price=30.00title=Harry Potterauthor=J K. Rowlingyear=2005price=$29.9
新闻热点
疑难解答