首页 > 代码库 > XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子

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();         */    }}

 

XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子