@java
对xml进行读取,写入,增删改查操作
导入dom4j-2.0.3.jar
下载地址:(https://dom4j.github.io/)
1. 读取xml
两种方式嵌套与不嵌套的xml
1.user1.xml(不嵌套)
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="001" name="zhangsan">西安</user>
<user id="002" name="李四">beijing</user>
</users>
2.user2.xml(嵌套)
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user type="button">
<id>001</id>
<name>张三</name>
<age>20</age>
</user>
<user type="submit">
<id>002</id>
<name>李四</name>
<age>21</age>
</user>
<user type="submit">
<id>003</id>
<name>三儿</name>
<age>22</age>
</user>
</users>
//对其进行读取(解析)
package com.it.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
//读取xml
public class DemoXML {
//文件路径
//public static File files=new File("d:\\users1.xml");
public static File files=new File("d:\\users2.xml");
//读取xml文件
//获取到document
public static Document parseXML(){
SAXReader reader=new SAXReader();
try {
return reader.read(files);
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
//遍历节点获取内容
public static void readXML(){
//获取根节点
Element root=parseXML().getRootElement();
//获取所有的element的集合(相当于标签)
List<Element> elementList= root.elements();
// for (Element element:elementList) {
// //通过属性获取值
// System.out.println(element.attributeValue("id")+"\t"+element.attributeValue("name")+"\t"+element.getText().trim());
// }
for (Element element:elementList) {
//嵌套 每一个标签相当于一个element
System.out.println(element.attributeValue("type")
+"\t"+element.element("id").getText()+
"\t"+element.element("age").getText()
+"\t"+element.element("name").getText());
}
}
//主方法
public static void main(String[] args) {
readXML();
}
}
2.写内容到xml
package com.it.xml;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
//写内容到xml
public class Foo {
//创建xml
public Document creataDocument(){
//生成Doucment
Document document= DocumentHelper.createDocument();
//不嵌套
// //1.生成根
// Element root=document.addElement("root");
// //2.添加子元素
// Element author1=root.addElement("author")
// .addAttribute("name","kkk")
// .addAttribute("location","US")
// .addText("sdhajkjasdn");
// Element author2=root.addElement("author")
// .addAttribute("name","ooo")
// .addAttribute("location","EN")
// .addText("王贵林");
//嵌套写入
//1.生成根
Element root=document.addElement("users");
//2.添加子元素
Element user1=root.addElement("user")
.addAttribute("type","button");
Element id1=user1.addElement("id").addText("001");
Element name1=user1.addElement("name").addText("s1");
Element age1=user1.addElement("age").addText("21");
Element user2=root.addElement("user")
.addAttribute("type","button");
Element id2=user2.addElement("id").addText("002");
Element name2=user2.addElement("name").addText("s2");
Element age2=user2.addElement("age").addText("22");
return document;
}
//写入文件
public void writeXML(){
//拿到写好的Document
Document document=creataDocument();
XMLWriter xmlWriter=null;
//设置代码格式
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
try {
//写入指定文件
//xmlWriter=new XMLWriter(new FileWriter(new File("d:\\u1.xml")),outputFormat);
xmlWriter=new XMLWriter(new FileWriter(new File("d:\\u2.xml")),outputFormat);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Foo foo=new Foo();
foo.writeXML();
}
}
- 在指定的目录下创建一个XML文件,该文件必须含有根节点
同时该文件只被加载一次 进行增删改查操作
package com.it.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
//xml增删改查
public class XMLCRUD {
//在指定的目录下创建一个XML文件,该文件必须含有根节点
// 同时该文件只被加载一次
static File file=new File("d:\\u3.xml");
//静态代码块
static {
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//生成document及根元素
public static void createDocument(){
Document document= DocumentHelper.createDocument();
Element root=document.addElement("users");
writeXml(document);
//return document;
}
//将document 写入文件
public static void writeXml(Document document){
try {
//设置代码格式
OutputFormat format=OutputFormat.createPrettyPrint();
//写入指定文件
XMLWriter xmlWriter=new XMLWriter(new FileWriter(file),format);
//将document 写入文件
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//读取操作 获得document
public Document parseXml(){
SAXReader reader=new SAXReader();
try {
Document document=reader.read(file);
return document;
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
//获取到document 实现添加功能
public void add(String id,String name,String txt){
Document document=null;
//获取document
document =parseXml();
//获取根节点
Element root =document.getRootElement();
//添加子元素
Element user=root.addElement("user").addAttribute("id",id).addAttribute("name",name).addText(txt);
//调用写入文件的方法
writeXml(document);
}
//按照id 删除功能
public void delXml(String id){
Document document=null;
//获取document
document=parseXml();
//获取根
Element element=document.getRootElement();
//获取所有的element
List<Element> elementList= element.elements();
//迭代 判断id是否相等 如果相等移除
for (Element element1: elementList) {
if(element1.attributeValue("id").equals(id)) {
elementList.remove(element1);
break;
}
}
writeXml(document);
}
//按照id 修改功能
public void updateXml(String id,String name,String txt){
Document document=null;
//获取document
document=parseXml();
//获取根
Element element=document.getRootElement();
//获取所有的element
List<Element> elementList= element.elements();
//迭代 判断id是否相等 如果相等移除
for (Element element1: elementList) {
if(element1.attributeValue("id").equals(id)) {
element1.setText(txt);
element1.addAttribute("name",name);
break;
}
}
writeXml(document);
}
//按照id 查询所有功能
public void queryXml(){
Document document=null;
//获取document
document=parseXml();
//获取根
Element element=document.getRootElement();
//获取所有的element
List<Element> elementList= element.elements();
//迭代 判断id是否相等 如果相等移除
for (Element element1: elementList) {
System.out.println(element1.attributeValue("id")
+"\t"+element1.attributeValue("name")
+"\t"+element1.getText());
}
}
//主方法
public static void main(String[] args) {
XMLCRUD xmlcrud=new XMLCRUD();
xmlcrud.createDocument();
xmlcrud.add("01","s1","哈哈1");
xmlcrud.add("02","s2","哈哈2");
xmlcrud.add("03","s3","哈哈3");
xmlcrud.add("04","s4","哈哈4");
xmlcrud.delXml("03");
xmlcrud.updateXml("04","s5","哈哈5");
xmlcrud.queryXml();
}
}
注意:可以将String id,String name,String txt封装成一个对象
package bean;
public class User {
private String id;
private String name;
private String txt;
@Override
public String toString() {
return "Users{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", txt='" + txt + '\'' +
'}';
}
public User() {
}
public User(String id, String name, String txt) {
this.id = id;
this.name = name;
this.txt = txt;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
}
}
有兴趣的同学可以尝试一下