Java XML 重新整理过的

来源:互联网 发布:腾讯云和阿里云的区别 编辑:程序博客网 时间:2024/06/05 17:01
package com.company;import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.util.List;public class Main {    public static void main(String[] args) throws DocumentException, IOException {        //导入jar包        //File - ProjectStructure -> 左侧Modules        //-> +号, JARS or  ...  ->找到jar包并添加//        demo1();//        demo2();//        demo3();//        demo4();//        demo5();//        demo6();        demo7();    }    //解析    //常用的获取内容的方法    public static void demo1() throws DocumentException {        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        //1. 获取根节点(students)        Element root = document.getRootElement();        //获取根节点名称 - (students)        System.out.println("根节点名称: " + root.getName());        //2. 获取节点内容 - (无)        System.out.println("根节点内容:  " + root.getTextTrim());        //3. 获取子节点        List<Element> elements = root.elements();        System.out.println("子节点名称: " + elements.get(1).getName());        // 打印子节点的名字        System.out.println("子节点内容: " + elements.get(1).getTextTrim());        //"孙子节点" 获取student1的子节点        List<Element> subEs = elements.get(0).elements();        //打印student1的子节点的名字name        System.out.println("孙子节点的名称: " + subEs.get(0).getName());        //打印student的子节点的内容(本平)        System.out.println("孙子节点的内容: " + subEs.get(0).getTextTrim());        //练习: 使用for循环/for-each循环,        // 打印xml文件中所有标签的名字及内容        //提示:循环嵌套    }    public static void demo2() throws DocumentException {        //方式一 for循环        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        //1. 获取根节点(students)        Element root = document.getRootElement();        getNodes(root);//        List<Element> elements = root.elements();//        for (int i = 0; i < elements.size(); i++) {//            elements.get(i).getName();//            elements.get(i).getTextTrim();//            List<Element> subes = elements.get(i).elements();//            for (int j = 0; j < subes.size(); j++) {//                subes.get(j).getName();//                subes.get(j).getTextTrim();//                System.out.println("根节点名称: " + root.getName() + "子节点名称: "//                        + elements.get(i).getName()//                        + "孙子节点的名称: " + subes.get(j).getName() + "孙子节点的内容: " + subes.get(j).getTextTrim());//            }//        }//        //方式二 for-each循环//        System.out.println("根节点名称: " + root.getName());//        //2. 获取节点内容 - (无)//        System.out.println("根节点内容:  " + root.getTextTrim());//        for (Element e : elements) {//            System.out.println("子节点名称: " + e.getName());//            //2. 获取节点内容 - (无)//            System.out.println("子节点内容:  " + e.getTextTrim());//            List<Element> subEs = e.elements();//            for (Element e1 : subEs) {//                System.out.println("孙子节点名称: " + e1.getName());//                // 打印子节点的名字//                System.out.println("孙子节点内容: " + e1.getTextTrim());//            }//        }    }    //通用的遍历方式 - 递归    //参数为任意需要遍历的节点    public static void getNodes(Element node) throws DocumentException {        System.out.println("当前节点名称: " + node.getName());        System.out.println("当前节点内容:  " + node.getTextTrim());        List<Attribute> attr = node.attributes();        for (Attribute a : attr) {            System.out.println("属性名称: " + a.getName());            System.out.println("属性值: " + a.getValue());        }        //获取子节点        List<Element> elements = node.elements();        //遍历所有子节点        for (Element e : elements) {            //递归, 调用自己            getNodes(e);        }    }    //属性    public static void demo3() throws DocumentException {        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        //1. 获取根节点(students)        Element root = document.getRootElement();        List<Element> elements = root.elements();        //获取student1节点        Element stu1 = elements.get(0);        //通过名字直接获取        //注意: 只能获取一级标签        Element e = stu1.element("name");        System.out.println(e.getName());        System.out.println(e.getTextTrim());        //通过名字直接获取值        String str = stu1.elementText("name");        System.out.println(str);        //通过名字直接获取属性        Attribute att = stu1.attribute("id");        System.out.println(att.getName());        System.out.println(att.getValue());        //通过名字直接获取属性值        String str1 = stu1.attributeValue("id");        System.out.println(str1);        //当前节点的所有属性        List<Attribute> attr = stu1.attributes();        //属性名(id)        System.out.println("属性名: " + attr.get(0).getName());        //属性值(001)        System.out.println("属性值: " + attr.get(0).getValue());        //for循环遍历        for (int i = 0; i < elements.size(); i++) {            List<Attribute> attre = elements.get(i).attributes();            for (int j = 0; j < attre.size(); j++) {                attre.get(j).getName();                attre.get(j).getValue();                System.out.println("属性名字: " + attre.get(j).getName() + "属性值: " + attre.get(j).getValue());            }        }        //for-each遍历        for (Attribute a : attr) {            System.out.println("属性名字: " + a.getName() + "属性值: " + a.getValue());        }    }    //属性的增删改查    public static void demo4() throws DocumentException {        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        //1. 获取根节点(students)        Element root = document.getRootElement();        //先获取有属性的节点student1        Element stu1E = root.element("student1");        //获取属性        Attribute idA = stu1E.attribute("id");        //删除属性        stu1E.remove(idA);        //添加/修改属性        //如参数1存在,即修改        //不存在,就添加        stu1E.addAttribute("id", "新id 值");        //输出改变后的student1        getNodes(stu1E);    }    //节点的增删改查    public static void demo5() throws DocumentException, IOException {        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        //1. 获取根节点(students)        Element root = document.getRootElement();        //先获取有属性的节点student1        Element stu1E = root.element("student1");        //添加新的节点phone        Element phoneE = stu1E.addElement("phone");        //为节点设置值        phoneE.setText("133XXXXXXXX");        stu1E.remove(phoneE);        //删除节点        Element nameE = stu1E.element("name");//        stu1E.remove(nameE);        //修改        nameE.setText("张然2");        getNodes(stu1E);        writeToFile(document);    }    //将改动写入到文件中    public static void writeToFile(Document document) throws DocumentException, IOException {        //中文字符        //输出格式//        OutputFormat format = OutputFormat.createCompactFormat();//        //设置编码//        format.setEncoding("GBK");//        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");//        FileWriter fileWriter = new FileWriter(file);//        XMLWriter xmlWriter = new XMLWriter(fileWriter, format);//        xmlWriter.write(document);//        xmlWriter.close();        OutputFormat format = OutputFormat.createPrettyPrint();        format.setEncoding("UTF-8");        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/company/student.xml"), format);        xmlWriter.write(document);        xmlWriter.close();    }    //将字符串转化成XML    public static void demo6() throws DocumentException, IOException {        String text = "<members><member>aaa</member></members>";        Document document = DocumentHelper.parseText(text);        writeToFile(document);    }//    将XML转化为字符串    public static void demo7() throws DocumentException, IOException {        SAXReader sax = new SAXReader();        File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");        //读取文件内容,将内容以Document的形式呈现        Document document = sax.read(file);        Element root = document.getRootElement();        //将document整体转为字符串        String docStr = document.asXML();        System.out.println(docStr);        System.out.println("___________________________");        //将root根节点整体转为字符串        String rootStr = root.asXML();        System.out.println(rootStr);        System.out.println("___________________________");        //将一个节点转为字符串        String stu1 = root.element("student1").asXML();        System.out.println(stu1);    }}

这个是我XML里面自定义的内容

<?xml version="1.0" encoding="UTF-8"?><students>    <student1 id="001" color="red">        <name>张然2</name>        <sex></sex>        <year>23</year>        <phone>133XXXXXXXX</phone>    </student1>    <student2 id="002">        <name>云赫</name>        <year>24</year>        <sex></sex>    </student2></students>
原创粉丝点击