xml——JAXP解析

JAXP,即Sun 的 Java API for XML ,是Sun推出操作XML的一套API,所有 parser 器类作为 com.sun.xml.parser 包.

image位于API文档的javax.xml.parsers包中,如图所示:

重要的DocumentBuilderFactory XML解析工厂,静态newInstance方法可得到一个

工厂示例,通过实例调用newDocumentBuilder可得到文档解析器DocumentBuilder的实例

解析器通过parse方法得到Document 对象。Document 对象操作完成之后写入到xml文件是

image需要用到另外的几个包 ,如左图所示:

通过TransformerFactory 调用newInstance得到一个工厂实例,工厂实例调用newTransformer

得到转换器,然后调用该转换器的transform方法可将Document 对象写入到xml文件

下面是对xml实现CRUD的实例

JaxpXMLUtil.java

package com.braden.util;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class JaxpXMLUtil {
    String path 
= "";

    
public JaxpXMLUtil(String path) {
        
this.path = path;
    }

    
public Document getDocument() {
        DocumentBuilderFactory factory 
= DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        Document document 
= null;
        
try {
            builder 
= factory.newDocumentBuilder();
            document 
= builder.parse(path);
        } 
catch (Exception e) {
            
throw new RuntimeException(e);
        }
        
return document;

    }

    
public boolean writeToXml(Document document, String path) {
        
boolean flag = false;
        TransformerFactory tFactory 
= TransformerFactory.newInstance();

        
try {
            Transformer tf 
= tFactory.newTransformer();
            
if (path != null && path != "") {
                tf.transform(
new DOMSource(document), new StreamResult(
                        
new File(path)));
                flag 
= true;
            } 
else {
                flag 
= false;
            }
        } 
catch (Exception e) {
            
throw new RuntimeException(e);
        }
        
return flag;
    }

    
public String getId() {
        Document document 
= this.getDocument();
        NodeList list 
= document.getDocumentElement().getChildNodes();
        
int id = 1;
        
if (list != null) {
            
int len = list.getLength();
            
for (int i = 0; i < len; i++) {
                Node node 
= list.item(i);
                
if (node.getNodeType()==Node.ELEMENT_NODE) {
                    id
++;
                }
            }
        }
        
return id+"";
    }
}

UserDaoImpl.java


package com.braden.impl;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.braden.dao.UserDao;
import com.braden.domain.User;
import com.braden.util.JaxpXMLUtil;

public class UserDaoImpl implements UserDao {

    JaxpXMLUtil util 
= null;

    
public UserDaoImpl() {
        util 
= new JaxpXMLUtil("src/user.xml");
    }

    
public boolean delete(String id) {
        
boolean flag = false;
        Document document 
= util.getDocument();
        NodeList user_list 
= document.getElementsByTagName("user");
        
for (int i = 0; i < user_list.getLength(); i++) {
            Element e 
= (Element) user_list.item(i);
            
if (e.getAttribute("id").equals(id)) {
                Node node 
= user_list.item(i);
                e.getParentNode().removeChild(node);
                util.writeToXml(document, 
"src/user.xml");
                flag 
= true;
            }
        }
        
return flag;

    }

    
public User find(String id) {
        Document document 
= util.getDocument();
        NodeList user_list 
= document.getElementsByTagName("user");
        User user 
= null;
        
for (int i = 0; i < user_list.getLength(); i++) {
            Element e 
= (Element) user_list.item(i);
            
if (e.getAttribute("id").equals(id)) {
                user 
= new User();
                Node addressNode 
= e.getElementsByTagName("address").item(0);
                Node bitthdayNode 
= e.getElementsByTagName("bitthday").item(0);
                Node genderNode 
= e.getElementsByTagName("gender").item(0);
                Node usernameNode 
= e.getElementsByTagName("username").item(0);
                Node passwordNode 
= e.getElementsByTagName("password").item(0);
                user.setAddress(addressNode.getTextContent());
                user.setBitthday(bitthdayNode.getTextContent());
                user.setGender(genderNode.getTextContent());
                user.setUsername(usernameNode.getTextContent());
                user.setPassword(passwordNode.getTextContent());
                
break ;
            }
        }
        
return user;
    }

    
public boolean update(String id, String updateitem, String updateinfo) {
        
boolean flag = false;
        Document document 
= util.getDocument();
        NodeList user_list 
= document.getElementsByTagName("user");
        
for (int i = 0; i < user_list.getLength(); i++) {
            Element e 
= (Element) user_list.item(i);
            
if (e.getAttribute("id").equals(id)) {
                NodeList user_child_List 
= e.getChildNodes();
                
for (int j = 0; j < user_child_List.getLength(); j++) {
                    Node node_item 
= user_child_List.item(j);
                    
if (node_item.getNodeName().equals(updateitem)) {
                        
if (!node_item.getTextContent().equals(updateinfo)) {
                            node_item.setTextContent(updateinfo);
                            util.writeToXml(document, 
"src/user.xml");
                            flag 
= true;
                        }

                    }
                }
            }

        }

        
return flag;
    }

    
public boolean insert(User user) {

        Document document 
= util.getDocument();
        
/* System.out.println(document.getDocumentURI()); */
        Element node_user 
= document.createElement("user");
        node_user.setAttribute(
"id", user.getId());
        Element node_username 
= document.createElement("username");
        node_username.setTextContent(user.getUsername());
        Element node_id 
= document.createElement("id");
        node_id.setTextContent(user.getId());
        Element node_gender 
= document.createElement("gender");
        node_gender.setTextContent(user.getGender());
        Element node_password 
= document.createElement("password");
        node_password.setTextContent(user.getPassword());
        Element node_bitthday 
= document.createElement("bitthday");
        node_bitthday.setTextContent(user.getBitthday());
        Element node_address 
= document.createElement("address");
        node_address.setTextContent(user.getAddress());
        node_user.appendChild(node_username);
        node_user.appendChild(node_bitthday);
        node_user.appendChild(node_address);
        node_user.appendChild(node_gender);
        node_user.appendChild(node_password);
        document.getDocumentElement().appendChild(node_user);

        
try {
            util.writeToXml(document, 
"src/user.xml");
            
return true;
        } 
catch (Exception e) {
            
throw new RuntimeException(e);
        }

    }

}

UserDaoImplTest.java

package com.braden.junit;

import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.xml.sax.SAXException;
import com.braden.dao.UserDao;
import com.braden.domain.User;
import com.braden.impl.UserDaoImpl;
import com.braden.util.JaxpXMLUtil;

public class UserDaoImplTest {
    
    
static UserDao dao;
    
static JaxpXMLUtil util;
    @BeforeClass
    
public static void setUpBeforeClass() throws Exception {
        dao 
= new UserDaoImpl();
        util 
= new JaxpXMLUtil("src/user.xml");
    }

    @AfterClass
    
public static void tearDownAfterClass() throws Exception {
    }

    @Before
    
public void setUp() throws Exception {
        
    }

    @After
    
public void tearDown() throws Exception {
    }

    @Test
    
public void testDelete() {
        
            
if (dao.delete("2")) {
                System.out.println(
"删除成功");
            } 
else {
                System.out.println(
"删除失败");
            } 
    }

    @Test
    
public void testFind() {
        User user 
= dao.find("2");
        
if (user!=null) {
            System.out.println(user.getPassword());
        } 
else {
            System.out.println(
"用户不存在");
        }
    }

    @Test
    
public void testUpdate() {
        
if(dao.update("2""password","lina")) {
            System.out.println(
"更新成功");
        } 
else {
            System.out.println(
"更新失败");
        }
    }

    @Test
    
public void testInsert() throws SAXException, IOException, ParserConfigurationException {
        String id 
=util.getId();
        User user 
= new User();
        user.setAddress(
"beijing"+id+"beijing");
        user.setBitthday(
"1984-09-03");
        user.setId(id);
        user.setUsername(
"braden_"+id);
        user.setGender(
"female");
        user.setPassword(
"123456");
        
try {
            dao.insert(user);
            System.out.println(
"user" + user.getId()+"添加成功!");
        } 
catch (Exception e) {
            
throw new RuntimeException(e);
        }
    }

}

User.java


package com.braden.domain;

public class User {
    
private String username;
    
private String id;
    
private String bitthday;
    
private String address;
    
private String gender;
    
private String password;
    
public User() {
        
super();
    }
    
public User(String username, String id, String bitthday, String address,
            String gender, String password) {
        
super();
        
this.username = username;
        
this.id = id;
        
this.bitthday = bitthday;
        
this.address = address;
        
this.gender = gender;
        
this.password = password;
    }
    
public String getUsername() {
        
return username;
    }
    
public void setUsername(String username) {
        
this.username = username;
    }
    
public String getId() {
        
return id;
    }
    
public void setId(String id) {
        
this.id = id;
    }
    
public String getBitthday() {
        
return bitthday;
    }
    
public void setBitthday(String bitthday) {
        
this.bitthday = bitthday;
    }
    
public String getAddress() {
        
return address;
    }
    
public void setAddress(String address) {
        
this.address = address;
    }
    
public String getGender() {
        
return gender;
    }
    
public void setGender(String gender) {
        
this.gender = gender;
    }
    
public String getPassword() {
        
return password;
    }
    
public void setPassword(String password) {
        
this.password = password;
    }
    
    
}

得到的xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- <!DOCTYPE user PUBLIC "//UNKNOWN/" "user.dtd"> -->
<users>
<user id="1">
<username>braden_1</username>
<bitthday>1984-09-03</bitthday>
<address>beijing1beijing</address>
<gender>female</gender>
<password>123456</password>
</user>
<user id="2">
<username>braden_2</username>
<bitthday>1984-09-03</bitthday>
<address>beijing2beijing</address>
<gender>female</gender>
<password>123456</password>
</user>
<user id="3">
<username>braden_3</username>
<bitthday>1984-09-03</bitthday>
<address>beijing3beijing</address>
<gender>female</gender>
<password>123456</password>
</user>
</users>

posted on 2010-04-22 22:15 braden 阅读(1612) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2010年4月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜