首页 > 代码库 > 解析XML内容到User对象

解析XML内容到User对象

users.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2  3 <xml-root> 4     <conn-params> 5         <conn-url>jdbc:mysql://192.168.101.7:3306/bbs</conn-url> 6         <conn-driver>com.mysql.jdbc.Driver</conn-driver> 7         <conn-username>root</conn-username> 8         <conn-password>root</conn-password> 9     </conn-params>10 11     <person xmlns:u="http://example.org/user">12         <u:user>13             <u:username>xzc</u:username>14             <u:password>sdf23223</u:password>15             <u:birthday>2012-01-23</u:birthday>16         </u:user>17         <u:user>18             <u:username>误闯</u:username>19             <u:password>wuchuang3223</u:password>20             <u:birthday>2002-01-03</u:birthday>21         </u:user>22     </person>23 </xml-root>

 

 

采用DOM api 解析XML

1. User类

 1 public class User { 2      3     private String username; 4     private String password; 5     private String birthday; 6      7     public String toString() { 8         return "username = " + username + ", password = " + password + ", birthday = " + birthday; 9     }

    //省略setter,getter
10 }

2. DomUtil解析类

  1 package sax.parsing.user;  2   3 import java.io.FileInputStream;  4 import java.util.ArrayList;  5 import java.util.List;  6   7 import javax.xml.parsers.DocumentBuilder;  8 import javax.xml.parsers.DocumentBuilderFactory;  9 import javax.xml.parsers.ParserConfigurationException; 10  11 import org.w3c.dom.Document; 12 import org.w3c.dom.Element; 13 import org.w3c.dom.Node; 14 import org.w3c.dom.NodeList; 15 import org.xml.sax.InputSource; 16  17 public class DomUtil { 18      19      20     private DocumentBuilderFactory builderFactory; 21     private DocumentBuilder builder; 22     private Document document; 23      24     public DomUtil() throws ParserConfigurationException { 25         builderFactory = DocumentBuilderFactory.newInstance(); 26         builder = builderFactory.newDocumentBuilder(); 27     } 28      29     public DocumentBuilderFactory getBuilderFactory() { 30         return builderFactory; 31     } 32     public DocumentBuilder getBuilder() { 33         return builder; 34     } 35      36     public List<User> parseXml(String filepath) throws Exception { 37          38         document = builder.parse(new InputSource(new FileInputStream(filepath))); 39          40          41         List<User> list = new ArrayList<User>(); 42          43         Element root = document.getDocumentElement(); //从文档根节点获取文档根元素节点root => xml  44         NodeList childNodes = root.getChildNodes(); 45          46         for (int i=0; i<childNodes.getLength(); i++) { 47             Node node = childNodes.item(i); 48              49             /* 50              *     <person>    51                         <user>    52                             <username>xzc</username>    53                             <password>sdf23223</password>    54                             <birthday>2012-01-23</birthday>    55                         </user>    56                         <user>    57                             <username>误闯</username>    58                             <password>wuchuang3223</password>    59                             <birthday>2002-01-03</birthday>    60                         </user>    61                     </person>  62              */ 63             if ("person".equals(node.getNodeName())) { 64                  65                 NodeList pChildNodes = node.getChildNodes(); 66                  67                 for (int t=0; t<pChildNodes.getLength(); t++) { 68                  69                     Node nd = pChildNodes.item(t); 70  71                     if (nd.getNodeType() == Node.ELEMENT_NODE && nd.getNodeName().equals("user")) { 72                          73                         User user = new User(); 74                          75                         NodeList userChildNodes = nd.getChildNodes(); 76                          77                         for (int k=0; k<userChildNodes.getLength(); k++) { 78                             Node userNode = userChildNodes.item(k); 79                             String nodeName = userNode.getNodeName(); 80                             String nodeValue =http://www.mamicode.com/ userNode.getTextContent(); 81                             System.out.println("nodeType=" + userNode.getNodeType() + ", nodeName=" + nodeName + ", nodeValue="http://www.mamicode.com/+ nodeValue); 82                              83                              84                             if ("username".equals(nodeName))  85                                 user.setUsername(nodeValue); 86                             if ("password".equals(nodeName)) 87                                 user.setPassword(nodeValue); 88                             if ("birthday".equals(nodeName)) 89                                 user.setBirthday(nodeValue); 90                         } 91                         list.add(user); 92                     } // 若当前节点是user 93                 }             94             } // 若当前元素是person的处理逻辑     95         }// 完成对根元素的所有子节点的判断 96          97         return list; 98     } 99     100     101     public static void main(String[] args) {102         103         try {104             DomUtil domUtil = new DomUtil();105             List<User> users = domUtil.parseXml("src/sax/parsing/user/jdbc-params.xml");106             107             for(User user : users) {108                 System.out.println(user);109             }110         } catch (ParserConfigurationException e) {111             e.printStackTrace();112         } catch (Exception e) {113             // TODO Auto-generated catch block114             e.printStackTrace();115         }116     }117 }

输出结果:

nodeType=3, nodeName=#text, nodeValue= http://www.mamicode.com/###此处是Text节点的值(换行+3个制表符)

nodeType=1, nodeName=username, nodeValue=http://www.mamicode.com/xzc
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=1, nodeName=password, nodeValue=http://www.mamicode.com/sdf23223
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=1, nodeName=birthday, nodeValue=http://www.mamicode.com/2012-01-23
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=1, nodeName=username, nodeValue=http://www.mamicode.com/误闯
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=1, nodeName=password, nodeValue=http://www.mamicode.com/wuchuang3223
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

nodeType=1, nodeName=birthday, nodeValue=http://www.mamicode.com/2002-01-03
nodeType=3, nodeName=#text, nodeValue=http://www.mamicode.com/

username = xzc, password = sdf23223, birthday = 2012-01-23
username = 误闯, password = wuchuang3223, birthday = 2002-01-03

 

采用SAX解析XML文件内容到User对象

 1 package sax.parsing.user; 2  3 import java.io.File; 4 import java.io.IOException; 5 import java.util.ArrayList; 6 import java.util.List; 7  8 import javax.xml.parsers.ParserConfigurationException; 9 import javax.xml.parsers.SAXParser;10 import javax.xml.parsers.SAXParserFactory;11 12 import org.xml.sax.Attributes;13 import org.xml.sax.SAXException;14 import org.xml.sax.helpers.DefaultHandler;15 16 public class SaxUtil extends DefaultHandler {17     18     19     private List<User> users = new ArrayList<User>();20     private User user;21     private String content;22     23     @Override24     public void characters(char [] ch, int start, int length) throws SAXException {25         content = new String(ch, start, length);26     }27     28     /** 29      *  xmlns:prefix=uri30      *  qName, prefix:localName31      * @param uri 32      *         The Namespace URI, or the empty string if the element has no Namespace URI 33      *      or if Namespaceprocessing is not being performed.34      *      如果元素没有命名空间URI、命名空间处理未被开启,则为空字符串35      * @param localName 36      *         The local name (without prefix), 37      *         or the empty string if Namespace processing is not being performed.38      *         不带前缀的本地名,如果命名空间处理未被开启,则为空字符串39      * @param qName 40      *         The qualified name (with prefix), 41      *      or the empty string if qualified names are not available.42      *      带前缀的全限定名,如果限定名不可得到,则为空串43      * @param attributes 44      *         The attributes attached to the element.  45      *      If there are no attributes, it shall be an empty Attributes object.46      *      附加在该元素上的属性,如果元素没有属性,则为空的Attributes对象47      */48     @Override49     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {50         51         if ("user".equals(localName)) {52             user = new User();53             System.out.println("### " + localName);54             System.out.println("<" + qName + ">");55         }57     }58     59     @Override60     public void endElement(String uri, String localName, String qName) throws SAXException {61         62         if ("username".equals(localName))63             user.setUsername(content);64         65         if ("password".equals(localName))66             user.setPassword(content);67         68         if ("birthday".equals(localName))69             user.setBirthday(content);70         71         if ("user".equals(localName))72             users.add(user);73     }74     75     76     77     public List<User> getUsers() {78         return users;79     }80     81     82     public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {83         84         SAXParserFactory parserFactory = SAXParserFactory.newInstance();85         parserFactory.setNamespaceAware(true); //设置启用命名空间,这样localName才可用86         SAXParser parser = parserFactory.newSAXParser();87         88         SaxUtil saxUtil = new SaxUtil();89         90         parser.parse(new File("src/sax/parsing/user/jdbc-params.xml"), saxUtil);91         List<User> userlist = saxUtil.getUsers();92         93         for (User user : userlist)94             System.out.println(user);95     }96 97 }

输出结果:

### user
<u:user>
### user
<u:user>
username = xzc, password = sdf23223, birthday = 2012-01-23
username = 误闯, password = wuchuang3223, birthday = 2002-01-03

 

该实验例子摘自: http://toreking.iteye.com/blog/1669645

解析XML内容到User对象