1.XML文档语法
1. 版本控制 必须存在,并且必须存在于首行
2.标记语言是<>定义
3.在xml文件中可以自定义标签,在html中使用的是html提供的标记
4.在xml文件中有且仅有一个跟标签|根元素
5.标签分为: 双标签(闭合标签) | 单标签(自闭和标签)
6.xml是一个语言严格的标记语言
7.作用: 做数据的存储,传输,解析...
8.属性: 帮助更完整|全面的展示标签的作用 属性名="属性值"
<?version=1.0 encoding="UTF-8"?>
<!--人员列表--> --->注释
<persons> ---> 根标记
<person id="01">
<name>邹辉</name>
<age>18</age>
<gender>男</gender>
</person>
<person id="02">
<name>胜辉</name>
<age>19</age>
<gender>女</gender>
</person>
</persons>格式良好的 XML 文档需满足以下条件
- 必须有XML声明语句 (第一行)
- 必须有且仅有一个根元素
- 标签成对
- 元素正确嵌套
XML里的预加载实体
xml中,一些字符拥有特殊的意义。如果把字符 < 放在xml元素中,会发生错误,这是因为解析器会把它当作新元素的开始,这样会产生xml错误。
2.XML解析
推荐使用Dom4J解析Xml
persons.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--相当于一个 list,存储包含多个Person信息 -->
<Persons>
<Person id="01">
<name>迪丽热巴</name>
<age>27</age>
<gender>女</gender>
</Person>
<Person id="02">
<name>范冰冰</name>
<age>35</age>
<gender>女</gender>
</Person>
<Teacher id="03">
<name>马云</name>
<age>50</age>
<gender>男</gender>
<subject>英语</subject>
</Teacher>
</Persons>2.1查询节点
getRootElement 获取xml文件的根节点
getName 获取节点的名字
getText 获取节点的文本
root.elements()-->获得根节点下的子节点
root.element()-->获得具体某个节点
attribute代表节点里面的属性 -->
attributeValue代表获得节点里面的具体属性
public static void main(String[] args) throws Exception {
//1.创建SAXReader对象
SAXReader reader = new SAXReader();
//2.加载某个xml文件
Document document = reader.read(new File("src/persons.xml"));
//3.获取根元素
Element root = document.getRootElement();
System.out.println("根节点: "+root.getName());
//遍历|获取子节点
List<Element> list = root.elements();
//遍历根元素的第一层子节点
list.forEach((e)->{
System.out.println("标签 名称: "+e.getName());
System.out.println("id属性值: "+e.attributeValue("id")); //根据属性名字获取属性值
//获取第二层子节点
List<Element> list2 = e.elements();
//遍历 拿到每一个姓名,年龄,性别
for(Element ele:list2){
System.out.println(ele.getName()+"----->"+ele.getText());
}
});
}2.2添加节点
SAXReader reader=new SAXReader();
//获取person文档
Document document=reader.read(new File("src/person.xml"));
//获取根节点
Element rootElement = document.getRootElement();
//添加"teacher"节点
Element element = rootElement.addElement("teacher");
//teacher节点再添加子节点salary并将salary标签里的文本设置为4000
element.addElement("salary").addText("4000");
//设置写出的格式
//PrettyPrint是稍微整洁点的格式
//CompatPrint是一行输出
OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
//加载xml输出器
XMLWriter writer=new XMLWriter(new FileWriter("src/person.xml"),prettyPrint);
//将xml文件写出
writer.write(document);
writer.flush();
writer.close();2.3通过代码写xml文件
Document document = DocumentHelper.createDocument();
Element element=document.addElement("zh");
Element first=element.addElement("aaa");
first.addAttribute("你好","哈哈哈");
Element element1 = first.addElement("bbb");
element1.addText("aaa");
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
FileOutputStream fileOutputStream=new FileOutputStream(new File("src/aaa.xml"));
XMLWriter writer=new XMLWriter(fileOutputStream,format);
writer.write(document);
writer.flush();
writer.close();2.4删除节点
使用remove函数删除
SAXReader reader=new SAXReader();
Document read = reader.read(new File("src/person.xml"));
Element rootElement = read.getRootElement();
List<Element> elements = rootElement.elements();
elements.forEach((element -> {
//获取id属性
Attribute attribute = element.attribute("id");
//获取属性的值
String value = attribute.getValue();
System.out.println(element.getName());
//如果属性值等于"1" 则删除
if("1".equals(value)){
rootElement.remove(element);
}
}));
//写出xml文件
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
XMLWriter writer=new XMLWriter(new FileWriter("src/person.xml"),outputFormat);
writer.write(read);
writer.flush();
writer.close();


京公网安备 11010502036488号