XML以及DOM4j解析XML文件

XML语法格式:
<元素名 属性名=”属性值”>元素内容

注意:
属性值用双引号包裹
一个元素可以有多个属性
属性值中不能直接包含< “ & (不建议 ‘ 、 >)
所有XML元素都必须有结束标签
XML标签对大小写敏感
XML必须正确嵌套
同级标签可以缩进对齐
元素名称可以包含字母、下划线、数字、其他符号
元素名称不能以数字或标点符号开始
元素名称不能包含空格

转义符:

符号 转义
< < ;
> > ;
" &qout ;
&apos ;
& & ;

DOM树
XML以及DOM4j解析XML文件_第1张图片
带< >为元素节点
节点:Node

解析XML:

XML以及DOM4j解析XML文件_第2张图片

使用Dom4j解析XML文件

前提:导入Dom4j包
以idea为例:1.File——Project structure——Global Libraries——点击 + ,选择java,选择jar包点击OK
2选择Modules ,选择要导入包的module 点击 + 选择library选择包,点击ok

XML以及DOM4j解析XML文件_第3张图片XML以及DOM4j解析XML文件_第4张图片
XML以及DOM4j解析XML文件_第5张图片
思路方法:
在最开始定义一个文档对象doc
读取文档:

//1首先实例化SAXReader对象
	SAXReader sAXReader = new SAXReader();

//2调用SAXReader对象的read()方法
	doc = sAXReader.read(file);

//3打印doc对象
	System.out.println(doc);

查询属性值:

//1获取根元素
	Element root = doc.getRootElement();
//2获得根元素下面的子元素
	Iterator brands = root.elementIterator();(因为子元素不只有1个所以使用iterator迭代器获取)
//3遍历子元素		
	while(brands.hasNext()){
//4判断如果有下一个元素,则输出子元素的name属性对应的值
		Element brand = (Element)brands.next();
		System.out.println(brand.attributeValue("name"));
//5.遍历子元素
		Iterator types = brand.elementIterator();
		while(types.hasNext()){
//6判断如果子元素如果有值,则输出子子元素的name属性对应的值
			Element typeEle = (Element)types.next();
			System.out.println(typeEle.attributeValue("name"));
		}
	}

添加子元素:

//1获得根元素
	Element root = doc.getRootElement();
//2添加子元素BrandInfo
	Element brandInfo = root.addElement("BrandInfo");
//3给子元素BrandInFo添加属性名和属性值
	brandInfo.addAttribute("name", "小米");
//4给子元素添加子子元素
Element type = brandInfo.addElement("Type");
//5给子子元素添加属性名,和属性值
	type.addAttribute("name", "5");

修改:

//1获取根元素
Element root = doc.getRootElement();
//2遍历根元素,获得子元素
Iterator brands = root.elementIterator();
int id = 0;
//3遍历子元素
while(brands.hasNext()){
	Element brandEle = (Element)brands.next();
		id++;
//4循环给子元素添加属性名和属性值
	brandEle.addAttribute("id", id+"");
}

删除元素

//1获取根元素
	Element root = doc.getRootElement();
//2遍历根元素的子元素
	Iterator brands = root.elementIterator();
//3判断如果子元素的属性名对应的属性值是想要删除的值,则删除当前元素的父元素和当前的子元素
	while(brands.hasNext()){
			Element brand = (Element)brands.next();
			if(brand.attributeValue("name").equals("华为")){
				brand.getParent().remove(brand);
			}
		}
//4保存到新的文件中
	saveXML(path);(需要自行创建方法)

保存工具方法
调用OutputFormant对象输出到新路径下的文档中

//1调用createPrettyPrint()方法输出Pretty格式的文档
OutputFormat format = OutputFormat.createPrettyPrint();
//2格式设置为GBK
format.setEncoding("GBK");
XMLWriter writer;
//3以某种特定格式输出到文件中
writer = new XMLWriter(new FileWriter(path),format);
writer.write(doc);
//4关闭writer对象
writer.close();

实现:
在main方法中调用各个方法

你可能感兴趣的:(XML)