dom4j是非官方的xml的操作方式

目录

  • 写入:
  • 读取:

写入:

当然是可以一直追加的那种哦

/*
		 * 向xml写入数据
		 */
		public static void setXml(Set<String> set) {
			try {
				/*
		         * 1. (创建)得到Document
		         * 2. (创建)得到root元素
		         * 3. 要把数据对象转换成Element元素
		         * 4. 把对象的属性插入到root元素中
		         * 5. 回写document
		         */
				//文件名
				String fileName="ss.xml";
				//文件夹路径
				String path = "F://eclipse//Five//WebContent//file//";
				//文件路径
				String filePath=path+fileName;
				//创建文件夹
				File Path=new File(path);
				if (!Path.exists()) {
					//把路径中不存在的文件夹也能创建出来
					Path.mkdirs();
				}
				//创建文件
				File file=new File(filePath);
				Element root=null;
				Document doc=null;
				//如果不存在则新建
				if (!file.exists()) {
					file.createNewFile();
					//创建一个xml文档
					doc=DocumentHelper.createDocument();
					//创建一个根节点
					root=doc.addElement("root");
					//添加注释
					root.addComment("这是注释");
					//创建root的子节点
					Element userInfo=root.addElement("userInfo");
					//自定义的属性数组
					String[] str= {"name","file","classes","sex","age"};
					int i=0;
					for(String s:set) {
						//创建userInfo的子节点
						userInfo.addElement(str[i++]).addText(s);
					}
					//获取文件输出流
					FileWriter fw=new FileWriter(file);
					//格式化,碰到\t换行
					OutputFormat format=new OutputFormat("\t",true);
					//这句话是给追加的准备的,碰到回车不换行,防止追加的没空行,之前的有空行
					format.setTrimText(true);
					//获取xml文件输出流
					XMLWriter writer=new XMLWriter(fw, format);
					//向writer写入doc
					writer.write(doc);
					//刷新
					fw.flush();
					//关闭流
					fw.close();
				}else {//实现追加数据
					//SAX解析
					SAXReader read=new SAXReader();
					//获取文件输入流
					FileReader fr=new FileReader(file);
					//获取文档结构
					doc=read.read(fr);
					root=doc.getRootElement();
					//创建root的子节点
					Element userInfo=root.addElement("userInfo");
					//自定义的属性数组
					String[] str= {"name","file","classes","sex","age"};
					int i=0;
					for(String s:set) {
						//创建userInfo的子节点
						userInfo.addElement(str[i++]).addText(s);
					}
					//获取文件输出流
					FileWriter fw=new FileWriter(file);
					//格式化,碰到\t换行
					OutputFormat format=new OutputFormat("\t",true);
					//这句话是给追加的准备的,碰到回车不换行,防止追加的没空行,之前的有空行
					format.setTrimText(true);
					//获取xml文件输出流
					XMLWriter writer=new XMLWriter(fw, format);
					//向writer写入doc
					writer.write(doc);
					//刷新
					fw.flush();
					//关闭流
					fw.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

这句话的区别

format.setTrimText(false);

java 写xml标签 java写入xml_java

format.setTrimText(true);

java 写xml标签 java写入xml_java 写xml标签_02

读取:

已经实现循环读取所有根节点下的所有子节点数据

/*
		 * 从xml读出数据
		 */
		public static void getXml() {
			try {
				//文件名
				String fileName="ss.xml";
				//文件夹路径
				String path = "F://eclipse//Five//WebContent//file//";
				//文件路径
				String filePath=path+fileName;
				//创建文件夹
				File Path=new File(path);
				if (!Path.exists()) {
					//把路径中不存在的文件夹也能创建出来
					Path.mkdirs();
				}
				//创建文件
				File file=new File(filePath);
				//如果不存在则新建
				if (!file.exists()) {
					file.createNewFile();
				}
				//SAX解析
				SAXReader read=new SAXReader();
				//获取文件输入流
				FileReader fr=new FileReader(file);
				//获取文档结构
				Document doc=read.read(fr);
				//获取根节点
				Element root=doc.getRootElement();
				//获得根节点所有的子节点
				List<Element> list=root.elements();
				//循环子节点
				for(Element e:list) {
					//获得该节点的所有子节点
					List<Element> list1=e.elements();
					//循环该节点的所有子节点
					for(Element e2:list1) {
						//输出节点名称和节点值
						System.out.println(e2.getName()+" : "+e2.getText());
					}
				}
				fr.close();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

java 写xml标签 java写入xml_数据_03


数据的处理再根据自己的需求修改。