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();