jaxp对xml的增删改查

(1)首先我需要一个java SDK API 文档

有一个在线的java sdk 1.6 api文档,网址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

 

(2)在javax.xml.parsers包,由包的名称可以知道这个就是xml解析的包,里面有四个类

DocumentBuilder和DocumentBuilderFactory两个是基于DOM模式解析

后两个类是基于SAX模式解析

                       

(3)新建一个包,利用上面的包解析xml

例如xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?><persons>
    <person>
        <name>小明</name>
        <age>24</age>
    </person>
    <person>
        <name>小红</name>
        <age>23</age>
    <sex>female</sex></person>
    
</persons>

解析的java文件

package cn.yangying.jaxptest;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

/**
 * 便利xml文件获取name标签
 * @author yangying
 *
 */
public class TestJaxp {

    public static void main(String[] args) throws Exception {
        //selectAll();
        //addElement();
        traverse();
    }
    
    //遍历所有节点
    private static void traverse() throws Exception{
        /*
         * 1.创建解析器工厂
         * 2.创建解析器
         * 3.获取xml文件
         * 
         * 4.获取所有的DOM节点
         * 5.遍历打印
         */
        
        //创建解析器工厂
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        //创建解析器
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        //获取xml文件
        Document document = documentBuilder.parse("src/1.xml");
        //遍历节点
        list1(document);
        
    
    }
    
    //递归遍历子节点
    private static void list1(Node node){
        if(node.getNodeType() == node.ELEMENT_NODE){
            System.out.println(node.getNodeName());
        }
        
        //获取所有节点        
        NodeList childList = node.getChildNodes();
        //遍历打印
        for(int i=0; i<childList.getLength(); i++){
            Node item = childList.item(i);
            list1(item);
        }
    }
    
    //添加节点
    private static void addElement() throws Exception {
        /*
         * 1.创建解析器工厂
         * 2.创建解析器
         * 3.获取xml文件
         * 
         * 4.创建<sex>标签
         * 5.创建文本节点
         * 6.文本节点付给<sex>节点子元素
         * 7.查询到person节点
         * 8.将sex节点付给person子元素
         * (发现xml文件没变化,因为我们只是改变了DOM内存的树形结构)
         * 
         * 9.会写到xml文件
         */
        
        //创建解析器工厂
        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
        //创建解析器
        DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
        //获取xml文件
        Document document = documentBuilder.parse("src/1.xml");    
        
        Element sexElem = document.createElement("sex");
        Text sexText = document.createTextNode("female");
        sexElem.appendChild(sexText);
        
        NodeList personList = document.getElementsByTagName("person");
        for(int i=0; i< personList.getLength(); i++){
            personList.item(i).appendChild(sexElem);
        }
        
        TransformerFactory transformerfactory = TransformerFactory.newInstance();
        Transformer transformer = transformerfactory.newTransformer();
        transformer.transform(new DOMSource(document), new StreamResult("src/1.xml"));
        
    }
    
    //查找元素
    private static void selectAll() throws Exception {
        /*
         * 1.创建解析器器工厂
         * 2.创建解析器
         * 3.获取xml文件
         * 
         * 4.获取所以节点为name的标签
         * 5.遍历打印
         */
        //创建解析器工厂
        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
        //创建解析器
        DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
        //获取xml文件
        Document document = documentBuilder.parse("src/1.xml");    
        //获取所有节点为name的标签
        NodeList list = document.getElementsByTagName("name");
        //便利打印
        for(int i=0; i<list.getLength(); i++){
            Node node = list.item(i);
            String s = node.getTextContent();
            System.out.println(s);
        }
    }

}

 

posted on 2015-11-18 13:53  wawa11  阅读(203)  评论(0编辑  收藏  举报

导航