您的位置:首页 > 编程语言 > Java开发

【java开发系列】—— JDOM创建、修改、删除、读取XML文件

2014-10-12 14:30 525 查看

有很多中操作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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: