有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。

JDOM下载地址

创建XML文档

  XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。而每个子元素都是一个Element对象,对象可以向下包含。

  1 因此我们可以通过先创建元素再将元素添加到父元素中,最后将顶层元素添加到根元素中。

  2 创建完文档元素后,就可以把元素添加到document对象中,然后写入文件。

  主要使用的函数:

Element.setAttribute 为元素添加信息

Element.addContent(String,String) 为元素添加子元素内容,也可以直接添加另一个元素节点

Document.setRootElement(Element) 为文档添加根元素

XMLOutputter.output(Document,FileWriter) 将Docuemnt写入到FileWriter文件流中

  下面是主要的操作过程,写入文件的过程放到了saveXML中

     @SuppressWarnings("null")
public static void createXML() {
// 创建document
Document mydoc = new Document(); // 创建元素person1
Element person1 = new Element("person");
person1.setAttribute("id", "ID001");
// 添加注释
person1.addContent(new Comment("this is person1")); person1.addContent(new Element("name").setText("xingoo"));
person1.addContent(new Element("age").setText("25"));
person1.addContent(new Element("sex").setText("M"));
// 可以嵌套添加子元素
Element address1 = new Element("address");
address1.setAttribute("zone", "province");
address1.addContent("LiaoNing");
person1.addContent(address1); // 创建元素person2
Element person2 = new Element("person");
person2.setAttribute("id", "ID002");
// 添加注释
person2.addContent(new Comment("this is person2")); person2.addContent(new Element("name").setText("xhalo"));
person2.addContent(new Element("age").setText("26"));
person2.addContent(new Element("sex").setText("M"));
// 可以嵌套添加子元素
Element address2 = new Element("address");
address2.setAttribute("zone", "province");
address2.addContent("JiLin");
person2.addContent(address2); // 在doc中添加元素Person
Element info = new Element("information");
info.addContent(person1);
info.addContent(person2);
mydoc.setRootElement(info); saveXML(mydoc);
}

saveXML()代码:

     public static void saveXML(Document doc) {
// 将doc对象输出到文件
try {
// 创建xml文件输出流
XMLOutputter xmlopt = new XMLOutputter(); // 创建文件输出流
FileWriter writer = new FileWriter("person.xml"); // 指定文档格式
Format fm = Format.getPrettyFormat();
// fm.setEncoding("GB2312");
xmlopt.setFormat(fm); // 将doc写入到指定的文件中
xmlopt.output(doc, writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}

  执行后,刷新项目,就可以在项目下看到person.xml文件了。

读取XML文档

  读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作。

  主要使用的函数:

SAXBuilder.build("xxx.xml") 解析XML文档

Document.getRootElement() 获取根元素

Element.getChildren() 获取根元素下的子元素,返回List<Element>

Element.getAttributeValue(String) 获取指定元素的信息

Element.getChildText 获取指定元素的内容
     public static void readXML() {
// 使用SAXBuilder解析器解析xml文件
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
String id = el.getAttributeValue("id");
String name = el.getChildText("name");
String age = el.getChildText("age");
String sex = el.getChildText("sex");
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("sex:" + sex);
System.out.println("--------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}

修改XML文档

  修改XML文档,也是先利用解析器找到指定的元素,使用setText或者setAttributeValue来修改元素内容

  修改后记得要保存到文件中,即在此调用saveXML()

     public static void updateXML(){
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
if (el.getAttributeValue("id").equals("ID001")) {
Element name = el.getChild("name");
name.setText("xingoo---update");
}
}
} catch (Exception e) {
e.printStackTrace();
}
saveXML(doc);
}

删除XML文档元素

  删除操作类似修改,调用removeCotent就可以根据内容删除指定的元素了。但是要用他的父节点调用。最后也需要保存到文件中才可以。

     public static void removeXML() {
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
if (el.getAttributeValue("id").equals("ID001")) {
root.removeContent(el);
}
}
} catch (Exception e) {
e.printStackTrace();
}
saveXML(doc);
}

最新文章

  1. spring mvc文件上传(单个文件上传|多个文件上传)
  2. javascript高级程序设计第5章,引用类型
  3. Programming in Go (Golang) – Setting up a Mac OS X Development Environment
  4. C++ 如何重复利用一个内存地址块
  5. Zookeeper 源码分析-启动
  6. Extjs Cmd 学习笔记
  7. Codevs 3729 飞扬的小鸟
  8. notes/Set up development environment on windows
  9. R Student Companion(R语言初学指南)的源代码_数据_插图
  10. BZOJ 3160: 万径人踪灭 [fft manacher]
  11. 《java入门第一季》之好玩的正则表达式
  12. Cookie 版购物车
  13. django 实战篇之路由层
  14. css缩放的坑
  15. 自建yum仓库,分别为网络源和本地源
  16. pycharm汉化补丁
  17. jmeter BeanShell实例-----两个变量之间的断言对比
  18. day15_雷神_前端03
  19. 个人作业Week2-代码复审(修改明确了要求)
  20. 登录实现之servlet和SpringMVC

热门文章

  1. HDU - 4291 循环节
  2. 深入理解promise
  3. 学习python-跨平台获取键盘事件
  4. ubuntu中安装kernel-devel
  5. TensorFlow-多层感知机(MLP)
  6. mysql把之前表单进行拆分
  7. PIE SDK介绍
  8. 「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)
  9. 完全原生javascript简约日历插件,js、html
  10. 文献综述二:UML技术在行业资源平台系统建模中的应用