首页 > 学院 > 开发设计 > 正文

使用Dom4j解析包含有DB连接信息的XML文件以及节点属性的获取

2019-11-14 21:35:27
字体:
来源:转载
供稿:网友
使用Dom4j解析包含有DB连接信息的xml文件以及节点属性的获取

包含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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表