黑马程序员技术交流社区

标题: XML解析,使用Dom4j增加修改删除xml内容 [打印本页]

作者: 杨杰锋    时间: 2016-10-14 12:04
标题: XML解析,使用Dom4j增加修改删除xml内容
import java.io.FileOutputStream;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class WriteDemo3 {
        /**
         *使用Dom4j增加修改删除xml内容
         * @throws Exception
         */
        @Test
        public void testAdd() throws Exception{
                //在内存中修改Document对象
                //1.创建Document
                Document doc = DocumentHelper.createDocument();
                //2.添加标签
                //2.1添加跟标签
                Element rootElem = doc.addElement("contacts");
                //2.2在根标签添加子标签
                Element contanctElem = rootElem.addElement("contact");
                contanctElem.addAttribute("id", "001");
               
                Element nameElem = contanctElem.addElement("name");
                nameElem.setText("杨杰锋");
                //把document写出到xml文件中
                FileOutputStream fos = new FileOutputStream("E:\\contact.xml");
                OutputFormat format = OutputFormat.createPrettyPrint();
                format.setEncoding("GBK");
                XMLWriter writer = new XMLWriter(fos,format);
               
                writer.write(doc);
               
                writer.close();
                System.out.println("写出成功");
        }
        /**
         *修改属性值,文本
         * @throws Exception
         */
        @Test
        public void testUpdate() throws Exception{
                Document document = new SAXReader().read(".\\src\\contact.xml");
                //在内存中修改Document对象
                //方式一://1修改属性
                //1.1得到属性Suzanne的标签对象
                Element contaceElem = document.getRootElement().element("contact");
               
                //1.2得到属性
                /*Attribute idAttr  = contaceElem.attribute("id");
                idAttr.setValue("003");
                Element nameElem = contaceElem.element("name");
                nameElem.setText("杨");*/

                //方式二:天假一个同名属性覆盖之前的属性
                contaceElem.addAttribute("id", "004");

                FileOutputStream fos = new FileOutputStream("E:\\contact.xml");
                OutputFormat format = OutputFormat.createPrettyPrint();
                format.setEncoding("GBK");
               
                XMLWriter writer = new XMLWriter(fos,format);
                writer.write(document);
                writer.close();
        }
        /**
         * 删除属性,值
         * @throws Exception
         */
        @Test
        public void testDel() throws Exception{
                Document document = new SAXReader().read(".\\src\\contact.xml");
                /*//需求:删除id值为2的contact标签
                //先得到所有的contact
                List<Element> list = document.getRootElement().elements();
                //遍历几个
                for (Element element : list) {
                        //id属性值是否为2
                        if(element.attributeValue("id").equals("2")){
                                //删除标签
                                element.detach();
                                break;
                        }
                }*/
                //需求:删除第一个contact标签的id属性
                //找到contac对象
                Element contactElem = document.getRootElement().element("contact");
                //找到id属性
                Attribute idAttr = contactElem.attribute("id");
                //调用方法删除属性
                idAttr.detach();

                FileOutputStream fos = new FileOutputStream("E:\\contact.xml");
                OutputFormat format = OutputFormat.createPrettyPrint();
                format.setEncoding("GBK");
                XMLWriter writer = new XMLWriter(fos,format);
                writer.write(document);
                writer.close();
               
        }
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2