zoukankan      html  css  js  c++  java
  • XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子

    1.DMO解析

    package cn.itcast.xml.dom;
    
    import java.io.File;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    public class Demo1 {
        public static void main(String[] args) throws Exception {
            //1 创建JAXPDOM 解析器工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //2 通过工厂获得解析器
            DocumentBuilder  builder= factory.newDocumentBuilder();
            //3 使用解析器解析文档得到Domcument对象
            Document  doc = builder.parse(new File("src/student.xml"));
            //...........
            //拿到所有的学生并打印学生信息
            //1 获得所有student元素对象
            NodeList  students = doc.getElementsByTagName("student");
            //2 遍历这些对象.取得number属性
            for(int i = 0 ; i < students.getLength() ; i++ ){
                /*if( students.item(i) instanceof Element){//判断是不是ELement对象
                    Element student = (Element)students.item(i);
                }*/
                if(students.item(i).getNodeType() ==  Node.ELEMENT_NODE){
                        Element student = (Element)students.item(i);
                        String number = student.getAttribute("number");
                        System.out.println("当前学生的学号是"+number);
                        //3 取得子元素.遍历子元素
                        NodeList list = student.getChildNodes();
                        for(int x = 0 ; x < list.getLength() ; x++){
                            if(list.item(x).getNodeType() ==  Node.ELEMENT_NODE){
                                // info可能是 name age sex
                                Element info = (Element)list.item(x);
                                // Node nodeName ==> 标签名 
                                if(info.getNodeName().equals("name")){
                                    System.out.println("当前学生的姓名是"+info.getTextContent());
                                }else if(info.getNodeName().equals("age")){
                                    System.out.println("当前学生的年龄是是"+info.getTextContent());
                                }else if(info.getNodeName().equals("sex")){
                                    System.out.println("当前学生的性别是"+info.getTextContent());
                                }
                            }
                        }
                        
                }
                
                
            }
            //4取得对应 名称 年龄 性别
        }
    }

    2.SAX解析

    1.重写处理函数

    package cn.itcast.xml.sax;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class MyHandler extends DefaultHandler {
    
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            System.out.println("文档开始解析!");
        }
    
    
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
                System.out.println("当前遍历的标签是"+qName);
                String number = attributes.getValue("number");
                
                if(!"".equals(number) && number!=null){
                    System.out.println("学生的学号是:"+number);
                }            
        }
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            String str =new String(ch,start,length);
            //去掉空白文本
            str = str.trim();
            
            if(str.length() != 0){
            System.out.println("当前解析的文本是:"+str);
            }
            
        }
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            super.endElement(uri, localName, qName);
            System.out.println(qName+"元素解析结束");
        }
    
        
        
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
            System.out.println("文档结束解析!");
        }
    }

    2.使用它

    package cn.itcast.xml.sax;
    
    import java.io.File;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    public class Demo1 {
        public static void main(String[] args) throws Exception {
        //1 创建sax 解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //2 获得sax解析器
        SAXParser  saxParser =factory.newSAXParser();
        //3 使用sax解析器解析xml文档.
        saxParser.parse(new File("src/student.xml"), new MyHandler());
        }
    }

    3.DEMO4J

    1.读取 xml文档并打印文档内容

    package cn.itcast.xml.dom4j;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;
    
    public class Demo1 {
        //hello 读取 xml文档并打印文档内容
        public static void main(String[] args) throws Exception {
               SAXReader reader = new SAXReader();
                Document document = reader.read("src/student.xml");
                System.out.println(document.asXML());
        }
    }

    2.取出所有学生的信息

    package cn.itcast.xml.dom4j;
    
    import java.util.Iterator;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Demo2 {
        //取出所有学生的信息
        public static void main(String[] args) throws Exception {
               SAXReader reader = new SAXReader();
                Document document = reader.read("src/student.xml");
                //通过文档对象获得 根节点
                Element root = document.getRootElement();
                //遍历根节点下 ,名字为student的子元素节点
                for ( Iterator i = root.elementIterator( "student" ); i.hasNext(); ) {
                    Element student = (Element) i.next();
                    //获得学生的number属性
                   String number = student.attributeValue("number");
                   System.out.println("学生的学号是"+number);
                    //获得学生的子元素
                   for ( Iterator j = student.elementIterator(); j.hasNext(); ) {
                       //可能是name age sex
                       Element info = (Element) j.next();
                       //获得元素的元素名
                       if(info.getName().equals("name")){
                           System.out.println("学生的姓名是"+info.getText());
                       }else   if(info.getName().equals("age")){
                           System.out.println("学生的年龄是"+info.getText());
                       }else   if(info.getName().equals("sex")){
                           System.out.println("学生的性别是"+info.getText());
                       }
                   }
    
                }
    
        }
    }

    3.(增)增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male

    package cn.itcast.xml.dom4j;
    
    import java.io.FileWriter;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo3 {
        //增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male
        public static void main(String[] args) throws Exception {
               SAXReader reader = new SAXReader();
                Document document = reader.read("src/student.xml");
                //通过文档对象获得 根节点
                Element root = document.getRootElement();
               
                //1.在根元素下添加学生元素
                Element student = root.addElement("student");
                //2.为学生元素添加number属性
                student.addAttribute("number", "ITCAST_0003");
                //3.为学生元素添加子元素name age sex
                //4.为子元素添加标签体
                student.addElement("name").addText("zhangsan");
                student.addElement("age").addText("30");
                student.addElement("sex").addText("male");
                
                
                //将内存中的Document会写到文件中
                
                
                // Pretty print the document to System.out
                OutputFormat format = OutputFormat.createPrettyPrint();
              //创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
                XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ), format );
                writer.write( document );
                writer.close();
                
                
               /* //创建一个xml的写入器. 构造函数中传入 写入的文件的位置
                XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ) );
                //  写入什么
                writer.write( document );
                //关闭并释放资源
                    writer.close();*/
        }
    }

    4.(改)修改一个学生.学号ITCAST_0001的学生年龄改为18

    package cn.itcast.xml.dom4j;
    
    import java.io.FileWriter;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo4 {
        // 修改一个学生.学号ITCAST_0001的学生年龄改为18
        public static void main(String[] args) throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/student.xml");
            // 通过文档对象获得 根节点
            Element root = document.getRootElement();
            // 1.获取到学生元素对象集合
            List<Element> list = root.elements();
            // 2.遍历集合
            for (int i = 0; i < list.size(); i++) {
                Element student = list.get(i);
                // 通过number属性找出要修改的student对象
                if (student.attributeValue("number").equals("ITCAST_0001")) {
                    // 3.设置student元素对象age子元素的文本为18
                    student.element("age").setText("18");
                }
            }
    
            // 将内存中的Document会写到文件中
    
            // Pretty print the document to System.out
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
            XMLWriter writer = new XMLWriter(
                    new FileWriter("src/student_copy.xml"), format);
            writer.write(document);
            writer.close();
    
            /*
             * //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
             * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
             * document ); //关闭并释放资源 writer.close();
             */
        }
    }

    5.(删)删除学号ITCAST_0001的学生

    package cn.itcast.xml.dom4j;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo6 {
        // 删除学号ITCAST_0001的学生
        public static void main(String[] args) throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/student.xml");
            // 通过文档对象获得 根节点
            Element root = document.getRootElement();
            
            //1.获取要删除的学生元素(xpath)
                String xpath = "//student[@number='ITCAST_0001']";
                Element student = (Element) root.selectSingleNode(xpath);
                //2.删除(找父节点删)
                root.remove(student);
            
            
            
            // 将内存中的Document会写到文件中
    
            // Pretty print the document to System.out
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");
            
            
            
            // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
            XMLWriter writer = new XMLWriter(
                    new FileOutputStream(new File("src/stu.xml")), format);
            writer.write(document);
            writer.close();
    
            
             /** //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
             * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
             * document ); //关闭并释放资源 writer.close();
    */         
        }
    }

    6.整合Xpath

    package cn.itcast.xml.dom4j;
    
    import java.io.FileWriter;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo5 {
        // 修改一个学生.学号ITCAST_0001的学生年龄改为18
        public static void main(String[] args) throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/student.xml");
            // 通过文档对象获得 根节点
            Element root = document.getRootElement();
            // 定义xpath表达式
            String xpath = "//student[@number='ITCAST_0001']";
            
            // 通过表达式 选取对应的元素
            Element student = (Element) document.selectSingleNode(xpath);
    
            //修改
            student.element("age").setText("18");
            
            
            
            
    
            // 将内存中的Document会写到文件中
    
            // Pretty print the document to System.out
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
            XMLWriter writer = new XMLWriter(
                    new FileWriter("src/student_copy.xml"), format);
            writer.write(document);
            writer.close();
    
            /*
             * //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
             * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
             * document ); //关闭并释放资源 writer.close();
             */
        }
    }
  • 相关阅读:
    Hadoop学习笔记(1) ——菜鸟入门
    自己动手做个智能小车(8)[终]
    自己动手做个智能小车(7)
    自己动手做个智能小车(6)
    CSS动画
    smarty的缓冲
    smarty模板
    修改登录密码
    登录验证码
    phpcms
  • 原文地址:https://www.cnblogs.com/insistence/p/5954472.html
Copyright © 2011-2022 走看看