• 解析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 = userNode.getTextContent();
     81                             System.out.println("nodeType=" + userNode.getNodeType() + ", nodeName=" + nodeName + ", nodeValue=" + 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 block
    114             e.printStackTrace();
    115         }
    116     }
    117 }

    输出结果:

    nodeType=3, nodeName=#text, nodeValue= ###此处是Text节点的值(换行+3个制表符)

    nodeType=1, nodeName=username, nodeValue=xzc
    nodeType=3, nodeName=#text, nodeValue=

    nodeType=1, nodeName=password, nodeValue=sdf23223
    nodeType=3, nodeName=#text, nodeValue=

    nodeType=1, nodeName=birthday, nodeValue=2012-01-23
    nodeType=3, nodeName=#text, nodeValue=

    nodeType=3, nodeName=#text, nodeValue=

    nodeType=1, nodeName=username, nodeValue=误闯
    nodeType=3, nodeName=#text, nodeValue=

    nodeType=1, nodeName=password, nodeValue=wuchuang3223
    nodeType=3, nodeName=#text, nodeValue=

    nodeType=1, nodeName=birthday, nodeValue=2002-01-03
    nodeType=3, nodeName=#text, nodeValue=

    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     @Override
    24     public void characters(char [] ch, int start, int length) throws SAXException {
    25         content = new String(ch, start, length);
    26     }
    27     
    28     /** 
    29      *  xmlns:prefix=uri
    30      *  qName, prefix:localName
    31      * @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     @Override
    49     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     @Override
    60     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

  • 相关阅读:
    模态框获取内容jQuery
    jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结
    jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)
    用dom1来实现,根据光标移动自动给表单加上背景色,光标移开自动去除背景色
    JavaScript两种创建标签的的方法,实现点击按钮让text自增
    vue前端路由搜索功能实现
    pycharm配置vue
    QT全局事件和绑定
    mysql事务、锁
    web前端上传文件按钮自定义样式
  • 原文地址:https://www.cnblogs.com/asnjudy/p/4237370.html
Copyright © 2020-2023  润新知