xml介绍
html是超文本标记语言,在Java中配置文件主要用2类:
Properties配置文件:主要配置的是由key=value组成的信息
xml配置文件:xml可以配置更加复杂的数据关系。
xml语法
xml的语法主要由下面几部分组成:
文档声明
元素-标签
属性-存在标签中
注释 <!-- -->
文档声明
要书写一个正确的xml文件,首先需要在文件的开始部分声明这个文件是一个xml文件。
声明格式:
<?xml xml的版本 xml的编码 xml是否依赖于其他的xml文件 ?>
<?xml version=”1.0” encoding=”编码表的名称” ?>
例如:<?xml version="1.0" encoding="gbk"?>
细节:在书写xml的声明时,声明必须以 <?xml 开始 必须是?>结束, 在<?xml中间不能有任何的其他符号。
在xml声明中书写的encoding 是告诉解析引擎使用什么编码表去解析这个xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone12"/>
</Brand>
</PhoneInfo>
xml解析
xml文件主要用来传输数据,作为配置文件,或者存储数据。不管做为哪种应用,最终都需要把xml中的数据解析出来。就必须研究xml的解析。
dom4j
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷。
DOM4J 表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。dom4j是一套开源的api。实际项目中,往往选择dom4j来作为解析xml的利器。
使用步骤:
1:导入Jar包
2:创建SAXReader:来读取XML文档
3:使用read方法读取xml文件
4:对xml文件中的元素进行操作(CRUD)
练习:
将XML文档中的元素解析并显示出来
SAXReader reader = new SAXReader();
Document doc = reader.read("src/phoneInfo.xml");
Element rootEle = doc.getRootElement();//获取根标签
System.out.println("根节点是:"+rootEle.getName());
List<Element> brand = rootEle.elements();//获取所有根节点的子节点
//attribute-表示的是属性 element-表示的是节点
//循环遍历eleLIst,取出每一个子标签,ele - value
for (Element ele : brand) {
String eleName = ele.getName();//标签名字
int size = brand.size();
List<Attribute> attrList = ele.attributes();//获取当前标签的所有的属性,组成一个集合
System.out.println("\t根节点的子节点是"+eleName);
//循环遍历attrList。取出所有的key与value
for (Attribute attr : attrList) {
String attrName = attr.getName();//属性名
String attrValue = attr.getValue();//属性值
System.out.println("\t当前节点的属性名是:"+attrName+",属性值是:"+attrValue);
List<Element> type = ele.elements();//取出子节点下的元素
for (Element types : type) {
Attribute attrs = types.attribute("name");//通过属性的名字,获取属性对象
String name = attrs.getName();
String value = attrs.getValue();
System.out.println("\t\t\t当前的节点名是"+types.getName()+"属性名是:"+name+"属性值是:"+value);
}
}
}
向文档中添加节点与属性
SAXReader reader = new SAXReader();
Document doc = reader.read("src/phoneInfo.xml");
Element rootEle = doc.getRootElement();//获取根标签
//rootEle添加一个子节点,新的子节点
Element addBrand = rootEle.addElement("Brand");
addBrand.addAttribute("name", "vivo");
//为brand添加子节点
Element addType = addBrand.addElement("Type");
addType.addAttribute("name", "V40");
//持久化,写进去
File toFlie = new File("src/phoneInfo.xml");
OutputStream outFile = new FileOutputStream(toFlie);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter write = new XMLWriter(outFile, format);
write.write(doc);
write.flush();
write.close();
讲文档中相对应的元素删除
SAXReader reader = new SAXReader();
Document doc = reader.read("src/phoneInfo.xml");
Element rootEle = doc.getRootElement();//获取根标签
List<Element> brand = rootEle.elements();//获取所有根节点的子节点
for (Element eles : brand) {
List<Attribute> list = eles.attributes();
Attribute attr = list.get(0);
String value = attr.getValue();
if("苹果".equals(value))
{
rootEle.remove(eles);
}
}
File toFlie = new File("src/phoneInfo.xml");
OutputStream outFile = new FileOutputStream(toFlie);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter write = new XMLWriter(outFile, format);
write.write(doc);
write.flush();
write.close();