XML文档结构
- 文档节点: document: xml文件
- 元素节点: element: 使用<>标签
- 属性节点: attr: 元素上属性
- 文档节点: txt: 元素内容
DOM解析
- Document Object Model: 文档对象模型;
- 将文档中的成员描述成对象;
- 使用java操纵XML --> js操纵HTML;
- DOM解析的特点
- 加载时,一次性将XML文件,加载到内存,形成Docuument对象;
- 代码操作Document,其实是操作内存中DOM树,与本地磁盘XML文本无直接关系;
- 操作的是内存中的`DOM树,磁盘中DOM文件不会改变 --> 进行同步,使两边一致;<查询无需同步,修改数据,需要同步>;
- 缺点: XML过大,可能造成内存溢出;
DOM解析步骤
创建连接
- 创建解析工厂
- 通过解析工厂得到解析器
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("src/prase/student.XML");
获取节点内容
NodeList list = doc.getElementsByTagName("name");
Node name = list.item(0);
System.out.println(name.getTextContent());
修改节点内容
NodeList agel = doc.getElementsByTagName("age");
Node age = agel.item(0);
age.setTextContent("20");
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(doc), new StreamResult("src/prase/student.XML"));
sax解析
- 逐行读取,基于事件驱动
- 优点: 不占内存,速度快
- 缺点: 只能读写,不能回写
DOM4J解析
创建读写对象
- 创建SAXReader对象
- 读取.xml文件对象
SAXReader reader = new SAXReader();
Document document = reader.read("src\\dom4j\\student.xml");
获取.xml元素信息
- 获取根元素
- 获取子元素
- 获取指定元素 :Element element();
- 获取指定元素值: String elementText();
- 获取指定元素属性值: String attributeValue();
Element rootElement = document.getRootElement();
//2.获取根元素
List<Element> elements = rootElement.elements("student");
//3.获取子元素
for(Element stuEle : elements) {
Element nameEle = stuEle.element("name");
System.out.println(nameEle.getText());
// Element element() --> 指定元素
getText() --> 获取元素信息
String name = stuEle.elementText("name");
System.out.println(name);
// String elementText() --> 获取指定元素信息
String num = stuEle.attributeValue("num");
System.out.println(num);
// 获取元素属性
回写.xml元素信息
Element rootElement = document.getRootElement();
// 获取根元素
Element stuEle = rootElement.addElement("student").addAttribute("number", "a0003");
// 获取子元素,设置子元素属性
stuEle.addElement("name").setText("廖浩艇");
stuEle.addElement("age").setText("21");
stuEle.addElement("sex").setText("男");
//添加子元素内容
OutputFormat of = OutputFormat.createPrettyPrint();
// .xml输出指定格式对象
OutputStreamWriter wr = new OutputStreamWriter(new FileOutputStream("src\\dom4j\\student.xml"),"UTF-8");
// 转换指定格式输出流文件;
XMLWriter xmlWriter = new XMLWriter(wr,of);
// 创建.xml输出流文件;
xmlWriter.write(document);
// 输出到.xml文件
wr.close();
//关闭文件;