• 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);
            }
        }
    
    }
  • 相关阅读:
    Java调用外部类定义的方法(Static与无Static两种)
    Java调用未被Static修饰的本类方法
    Java调用Static修饰的本类方法
    java利用Aspose.words.jar将本地word文档转化成pdf(完美破解版 无水印 无中文乱码)
    web-程序逻辑问题
    web-忘记密码了
    jenkins部署遇到离线问题如何解决
    Ansible基于playbook批量修改主机名实战
    windows/linux环境python3出现pip is configured with locations that require TLS/SSL, however the..不可用的解决方法
    linux软链接的创建、修改和删除
  • 原文地址:https://www.cnblogs.com/daisy-hust/p/4974319.html
Copyright © 2020-2023  润新知