【工程截图】
【person.xml】准备一个xml文件
<?xml version="1.0" encoding="UTF-8"?> <students> <student id="88888" phone="15888888888" sex="男"> <name>张三</name> <age>18</age> <school>清华</school> </student> <student id="99999" phone="15999999999" sex="女"> <name>李四</name> <age>28</age> <school>北大</school> </student> <AAAA> <aa1>aa111</aa1> <aa2>aa222</aa2> </AAAA> <BBBB></BBBB> </students>
【读取原有Xml文件的内容,然后将数据写入到磁盘上】
package com.Higgin.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * 读出原有xml文件的内容数据,然后将数据写入到磁盘上的XML文件 */ public class WriteDemo01 { public static void main(String[] args) throws DocumentException, IOException { //读取已存在的Xml文件person.xml Document doc=new SAXReader().read(new File("./src/person.xml")); //指定文件输出的位置 FileOutputStream out =new FileOutputStream("d:/student.xml"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close(); } }
【运行结果】内容和person.xml一致
【按照设定的格式将xml内容输出保存到对应的磁盘地址上】
package com.Higgin.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * 1.读出原有xml文件的内容数据,保存至Document对象 * 2.修改输出的format(输出格式、编码...) * 3.然后将document包含数据写入到磁盘上的XML文件 */ public class WriteDemo02 { public static void main(String[] args) throws DocumentException, IOException { //读取已存在的Xml文件person.xml Document doc=new SAXReader().read(new File("./src/person.xml")); //指定文件输出的位置 FileOutputStream out =new FileOutputStream("d:/student.xml"); /** * 指定文本的写出的格式: * 紧凑格式 :项目上线时候使用 * 漂亮格式:开发调试的时候使用 */ //OutputFormat format=OutputFormat.createCompactFormat(); //紧凑格式:去除空格换行 OutputFormat format=OutputFormat.createPrettyPrint(); //漂亮格式:有空格换行 /** * 指定生成的xml文档的编码影响了: * 1.xml文档保存时的编码 * 2.xml文档声明的encoding编码(Xml解析时的编码) * 结论:使用该方法生成Xml文档可以避免中文乱码问题 */ format.setEncoding("UTF-8"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out,format); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close(); } }
【运行结果】
同样在D盘下生成了一个student.xml文件
1.紧凑格式:
2.漂亮格式
3.注意:
/**
* 指定生成的xml文档的编码影响了:
* 1.xml文档保存时的编码
* 2.xml文档声明的encoding编码(Xml解析时的编码)
* 结论:使用该方法生成Xml文档可以避免中文乱码问题
*/
【增、删、改 Xml文件
/**
* 1.创建Document对象,
* 添加:各种标签、属性、文本
* 修改:属性值、文本
* 删除:标签、属性
* 2.修改输出的format(输出格式、编码...)
* 3.然后将document包含数据写入到磁盘上的XML文件
*/
】
【增加:文档、标签、属性】
/** * 增加:文档、标签、属性 */ @Test public void testAdd() throws DocumentException, IOException { //1.创建文档 Document doc=DocumentHelper.createDocument(); //2.添加标签 Element rootElem=doc.addElement("root"); Element stuElem=rootElem.addElement("student"); stuElem.addElement("name"); //4.增加属性 stuElem.addAttribute("id", "88888"); stuElem.addAttribute("sex", "男"); //指定文件输出的位置 FileOutputStream out =new FileOutputStream("d:/student.xml"); // 指定文本的写出的格式: OutputFormat format=OutputFormat.createPrettyPrint(); //漂亮格式:有空格换行 format.setEncoding("UTF-8"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out,format); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close(); }
【运行结果】
【修改:属性值、文本】
/** * 修改:属性值、文本 */ @Test public void testUpdate() throws DocumentException, IOException{ //创建Document对象,读取已存在的Xml文件person.xml Document doc=new SAXReader().read(new File("./src/person.xml")); /** * 修改属性值(方案一) * 方法:使用Attribute类(属性类)的setValue()方法 * 1.得到标签对象 * 2.得到属性对象 * 3.修改属性值 */ /* //1.1 得到标签对象 Element stuElem=doc.getRootElement().element("student"); //1.2 得到id属性对象 Attribute idAttr=stuElem.attribute("id"); //1.3 修改属性值 idAttr.setValue("000001"); */ /** * 修改属性值(方案二) * 方法:Element标签类的addAttribute("attr","value")方法 */ /* //1.得到属性值标签 Element stuElem=doc.getRootElement().element("student"); //2.通过增加同名属性的方法,修改属性值 stuElem.addAttribute("id", "000009"); //key相同,覆盖;不存在key,则添加 */ /** * 修改文本 * 方法:Element标签类的setTest("新文本值")方法 * 1.得到标签对象 * 2.修改文本 */ Element nameElem=doc.getRootElement().element("student").element("name"); nameElem.setText("王二麻子"); //指定文件输出的位置 FileOutputStream out =new FileOutputStream("d:/student.xml"); // 指定文本的写出的格式: OutputFormat format=OutputFormat.createPrettyPrint(); //漂亮格式:有空格换行 format.setEncoding("UTF-8"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out,format); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close(); }
【删除:标签、属性】
/** * 删除:标签、属性 */ @Test public void testDelete() throws DocumentException, IOException{ //创建Document对象,读取已存在的Xml文件person.xml Document doc=new SAXReader().read(new File("./src/person.xml")); /** * 删除标签 * 1.得到标签对象 * 2.删除标签对象(可以通过父类删除子标签,也可以自己删自己) */ /* Element ageElement=doc.getRootElement().element("student").element("age"); ageElement.detach(); //直接detch()删除 //ageElement.getParent().remove(ageElement); //先获取父标签,然后remove()删除子标签 */ /** * 删除属性 */ //1.得到标签对象 //等同于Element stuElem=doc.getRootElement().element("student"); Element stuElem=(Element) doc.getRootElement().elements().get(0); //2.得到属性对象 Attribute idAttr=stuElem.attribute("id"); //3.删除属性 idAttr.detach(); //指定文件输出的位置 FileOutputStream out =new FileOutputStream("d:/student.xml"); // 指定文本的写出的格式: OutputFormat format=OutputFormat.createPrettyPrint(); //漂亮格式:有空格换行 format.setEncoding("UTF-8"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out,format); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close(); }