java----操作XML文档

时间:2022-10-17 05:44:38
public class Dom4j03 {
    public static void main(String[] args) throws Exception {
        // ① 创建文档
        fn1();
        // ② 创建节点
        fn2();
        // ② 修改节点
        fn3();
    }
    private static void fn3() throws Exception{
        File file = new File(SD.D_W,"Text.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        // 打印到控制台
        XMLWriter w1 = new XMLWriter();
        w1.write(doc);
        // 修改属性
        Element root = doc.getRootElement();
        root.attribute("msg").setText("��");
        w1.write(doc);
        // 修改节点
        // 第一个C节点下的cc节点修改为CC节点
        Element c1 = (Element)root.elements("C").get(0);
        // 删除为父删子
        c1.remove(c1.element("cc"));
        c1.addElement("CC");
        // 修改内容
        Element c2 = (Element)root.elements("C").get(1);
        c2.setText("内容修改");
        // 删除节点(没有字节点的节点)
        for (Object obj : root.elements("C")) {
            Element ele = (Element) obj;
            if (ele.elements().size() == 0 && ele.getText().equals(""))
                root.remove(ele);
        }

        // 更新后控制台打印
        w1.write(doc);

        XMLWriter w2 = new XMLWriter(new FileWriter(file));
        w2.write(doc);
        w2.flush();
        w2.close();
    }
    // ② 创建节点
    private static void fn2() throws IOException{
        // 文档
        Document doc = DocumentHelper.createDocument();
        // xml文件流
        File file = new File(SD.D_W,"Text.xml");
        // ①
// XMLWriter writer = new XMLWriter(new FileWriter(file));
        // ②
        FileOutputStream out = new FileOutputStream(file);
        OutputFormat format = OutputFormat.createCompactFormat();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        // 操作节点
// Element root = DocumentHelper.createElement("Test");
// doc.add(root);
        // ②
        doc.addComment("注释"); // 注释
         Element root = doc.addElement("text");// 节点
         root.addAttribute("msg", "测试的xml");// 节点属性
         Element aEle = root.addElement("A");
         Element bEle = root.addElement("B");
         aEle.addCDATA("A标签的<cdata>文本");// 节点内容
         bEle.addText("B标签的普通文本");
         Element c1 = root.addElement("C");
         c1.addElement("cc");
         Element c2 = root.addElement("C");
         c2.addText("cc");
         root.addElement("C");
        // 写入文件
        writer.write(doc);
        // 关闭流
        writer.close();
    }

    // ① 创建文档
    private static void fn1() throws IOException{
        // 1.利用DocumentHelper功能类创建文档Document
        Document doc = DocumentHelper.createDocument();
// System.out.println(doc);
        // 2.利用Dom4j通过的流将doc写入xml文件
        XMLWriter writer = null;
        // 1)创建无参XMLWriter对象,该类会创建一个控制台输出流
// writer = new XMLWriter();
// writer.write(doc);
        // 2)创建一个参数为流的XMLWriter对象,则操作会依照参数流的指向
        File file = new File(SD.D_W,"Text.xml");
        Writer out = new FileWriter(file);
        writer = new XMLWriter(out);
        writer.write(doc);
        // 字符流关闭流时有缓冲区操作
        writer.close();
    }

}