XML
1. XML介绍
XML是一门标记语言,有以下特点:
- 语言规则非常严格
- HTML中的标签是固定的,而XML中的标签是自定义的,根据需求定义
- 作用是存储数据,解析数据,传递数据,配置信息
- 标签分为单标签和双标签
- 文件首行必须写"<?xml version="1.0" encoding="UTF-8"?>",这是版本控制声明
- 有且只有一个根标签
- 标签可以添加属性和子标签,属性的作用是帮助标签展示作用功能
2. XML解析及写出
XML的解析可以使用DOM4J,具体使用方法见下方代码。
需要解析的XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="101">
<id>101</id>
<name>张三</name>
<age>18</age>
</student>
<student id="102">
<id>102</id>
<name>李四</name>
<age>19</age>
</student>
</students>
解析及写出封装代码:
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.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
public class XMLDemo02 {
public static void main(String[] args) throws DocumentException, IOException {
Document document = getDocument("shangkeCODE/src/students.xml");
print(document);
Document document2 = create();
writeToXML(document2,"shangkeCODE/src/haha.xml");
print(document2);
}
//定义创建Document的方法
public static Document create(){
//1.创建一个Document对象
Document document = DocumentHelper.createDocument();
//2.添加根节点
Element root = document.addElement("Persons");
//3.添加子标签
Element ele = root.addElement("Person");
ele.addElement("name").addText("zhangsan");
ele.addElement("age").addText("18");
ele.addAttribute("id","1001");
Element ele2 = root.addElement("Person");
ele2.addElement("name").addText("lisi");
ele2.addElement("age").addText("19");
return document;
}
//定义写出到xml文件的方法
public static void writeToXML(Document document,String path) throws IOException {
//2.指定输出的标签格式
OutputFormat format = OutputFormat.createPrettyPrint(); //美丽格式
//1.构建输出流 XMLWriter
XMLWriter wt = new XMLWriter(new FileWriter(path),format);
//3.写出
wt.write(document);
//4.刷出
wt.flush();
//5.关闭
wt.close();
}
//定义遍历方法
public static void print(Document document){
//1.获取根节点
Element root = document.getRootElement();
System.out.println("根节点:"+root.getName());
//2.获取子节点
List<Element> list = root.elements();
for(Element ele:list){
System.out.println("子标签:"+ele.getName());
//获取遍历所有ele子元素的迭代器
Iterator<Element> it = ele.elementIterator();
while(it.hasNext()){
Element e = it.next();
System.out.println("孙子标签:"+e.getName()+"-->"+e.getText());
}
}
}
//定义获取Doucment对象的方法
public static Document getDocument(String path) throws DocumentException {
//1.创建一个SaxReader
SAXReader reader = new SAXReader();
//2.加载xml文件
Document doc = reader.read(path);
//3.返回
return doc;
}
}
写出的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Persons>
<Person id="1001">
<name>zhangsan</name>
<age>18</age>
</Person>
<Person>
<name>lisi</name>
<age>19</age>
</Person>
</Persons>