zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    
    }
  • 相关阅读:
    北京Uber优步司机奖励政策(4月1日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月1日)
    成都Uber优步司机奖励政策(3月31日)
    北京Uber优步司机奖励政策(3月31日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月31日)
    uber司机已经激活了,就是还没有上传头
    优步深圳车辆准入标准降啦!6万8年粤车牌!
    开优步认识各色各样的人,人生需要这样的新鲜体验!
    Uber:中国市场两年内不考虑盈利,每年补贴10亿美金
    设置Windows开机自动启动VirtualBox虚拟机系统
  • 原文地址:https://www.cnblogs.com/daisy-hust/p/4974319.html
Copyright © 2011-2022 走看看