欢迎使用CSDN-markdown编辑器
来源:互联网 发布:网络星期一 2015 编辑:程序博客网 时间:2024/06/16 22:07
XML 作为一种常用的数据存储文件,常用于项目的配置文件。网络上各种关于XML文件解析的文档,大多关注在xml文件解析上,并且写的很详细。如果把xml比作数据库中的表格,它也存在数据的“增删该查”。并且我们常用的xml在Java 中的解析方式有4种:Document、SAX、Jdom、Dom4j
在日常的开发中,作为一种必会的技能,在操作xml方面我们只需要熟练掌握一种,了解其它就好。下面本人介绍一下Jdom 关于XML 文档的生成中常遇到小问题。
1.标签值为空,xml用双标签标注
默认情况下Jdom生成Xml 的格式如下:
即:标签值为空,使用单标签加反斜线表示
解决:
// 生成上图Xml 的代码 String xmlFilePath="D:\\students.xml"; Document doc = new Document(); Element root = new Element("students"); Element student = new Element("student"); Element name = new Element("name"); name.setAttribute("id", "s1"); name.setText("phda"); Element sex = new Element("sex"); sex.setText(""); student.addContent(name); student.addContent(sex); root.addContent(student); doc.addContent(root); this.writeXml(doc, xmlFilePath);
格式化输出xml 方法:writeXml(Document doc ,String xmlFilePath)
public void writeXml(Document doc ,String xmlFilePath){ try { FileOutputStream fos = new FileOutputStream(new File(filepath)); Format format = Format.getRawFormat(); format.setEncoding("UTF-8");//设置编码 format.setIndent(" ");//换行、缩进字符 XMLOutputter XMLOut = new XMLOutputter(); XMLOut.setFormat(format); XMLOut.output(doc, fos); fos.close();//关闭文件输出流 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
执行结果:
注:保证双标签sex的关键是:
1.1标签值为空时设置空字符sex.setText(“”);
1.2换行缩进方式设置为:format.setIntent(” “);// 注意空格
弊端:这种换行缩进的方式设置,导致xml文档中换行缩进处多出许多空格。这些空格也属于Document的内容,可以通过root.getContent();输出显示出来;
再次操作生成的Document 时格式会变得很难看,如下图:
[这是操作上述xml ,向xml 中添加新元素student 后重新调用writeXml 方法生成xml文件截图]
解决:调用writeXml方法前取出多余空格;
根据以前的Document中的Element 树生成新的树:
private void cloneRoot(Element newRoot,Element root){ List<Element> childList = root.getChildren(); if(childList.size()>0) { for(Element e:childList){//这是从孩子接 Element newElement = new Element(e.getName()); if(e.getChildren().size()<=0){//设置元素的值 String text =e.getText(); if(text==null) text=""; newElement.setText(text); } newRoot.addContent(newElement);//添加 this.cloneDoc(newElement,e); } } }
[获得新的Root,重新设置Docuemnt: doc.setRootElement(newRoot); 然后在调用writeXml方法生成xml文档]
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- windows git操作
- Unity的旋转
- 生成html标签快捷键
- android中延迟执行某个任务
- 使用自定义控件和ListView实现快速索引功能
- 欢迎使用CSDN-markdown编辑器
- 依赖ijkplayer播放视频的项目
- Openstack组件部署 — keystone(domain, projects, users, and roles)
- hiho一下~week58 Beautiful String
- 乐视笔试第二编程题(一)
- 【JavaScript笔记二】请和我互动(常用互动方法)
- Linux系统下的/etc/nsswitch.conf文件
- Sublime3 快捷键
- LeetCode 352. Data Stream as Disjoint Intervals(数据流区间)