这里写目录标题
- XML概念
- 简介
- 作用
- XML使用
- 基本操作
- 解析xml文件
XML概念
简介
- XML全称:eXtensible Markup Language。是一个可扩展标记语言
- 操作使用类似于HTML,但是他更加灵活,没有固定的使用标签,都是自定义标签
作用
- 数据存储:XML与数据库一样,可以实现数据的持久化存储;并且 它格外简单
- 数据交换:它与操作系统无关,类似于txt文档,因此常用于记录 和传递信息。比如:国家气象部门发布的天气信息,就是以xml格式存储,这样 不论是什么系统的计算机、什么系统的手机、什么软件、什么网站都可以直接读 取到这些信息。
- 配置文件:很多网站和应用程序的配置文件;
XML使用
基本操作
直接编写xml文件
`<?xml version="1.0" encoding="UTF-8"?>
<ClothesSize>
<size height="身高<165">S</size>
<size height="165<身高<170">M</size>
<size height="170<身高<175">L</size>
<size height="175<身高<180">XL</size>
<size height="180<身高<185">XXL</size>
</ClothesSize>`
注意事项
- XML的声明要么不写,要么写在就写在第一行;
- 只能有一个根标签;
- 标签必须正确结束;
- 严格区分大小写;
- 标签不能以数字开头;
- 属性必须有值,且必须加引号;
解析xml文件
通常我们去通过xml编写的不多,大多是去解析xml,而不是像上面那样去编写
注意:路径一定正确,否则会报错
package com.ytzl.chapter06.demo.demo02;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @program: Java高级特性Api
* @description: 使用dom解析xml
* @author: Mr.He
* @create: 2022-05-07 09:44
**/
public class DomParseXml {
Document document = null;
//获取dom树
public void getDocument(){
//1:创建解析器工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//2:解析器工厂对象创建解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
//3:解析器对象指定的xml文件创建document对象
document = builder.parse("phoneInfo.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
//4:以document对象为起点操作dom树
//显示xml信息
public void showXmlInfo(){
//通过节点名获取节点
NodeList nodeList = document.getElementsByTagName("Brand");
//for遍历节点集合
for (int i = 0; i < nodeList.getLength(); i++) {
//通过item()获取每个节点
Node node = nodeList.item(i);
//将node节点转化成元素
Element element = (Element) node;
//通过获取节点属性获取属性值
String name = element.getAttribute("name");
//获取元素element的子元素
NodeList childNodes = element.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node item = childNodes.item(j);
//判断获取的节点是否为元素节点 (切换大小写:Ctrl+Shift+u)
if (item.getNodeType()==Node.ELEMENT_NODE){
Element element1 = (Element) item;
String name1 = element1.getAttribute("name");
System.out.println("手机:"+name+" 型号:"+name1);
}
}
}
}
//另存xml信息
public void saveXmlInfo(){
try {
//保存步骤
//1:获得TransformerFactory对象
//创建转换工厂
TransformerFactory factory = TransformerFactory.newInstance();
//2:创建Transformer对象
//创建转换解析器
Transformer transformer = factory.newTransformer();
//3:创建DOMSource对象
// 包含XML信息
DOMSource domSource = new DOMSource(document);
//4:设置输出属性
// name value
// 编码格式:encoding--UTF-8
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
// 5:创建StreamResult对象
// 包含保存文件的信息
StreamResult streamResult = new StreamResult(new FileOutputStream("NewPhoneInfo.xml"));
//6:将XML保存到指定文件中
transformer.transform(domSource,streamResult);
} catch (TransformerConfigurationException | FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
//增加xml信息
public void insertXmlInfo(){
//创建元素节点
Element brand = document.createElement("Brand");
//设置元素节点的属性
brand.setAttribute("name","VIVO");
//创建元素节点
Element type1 = document.createElement("type");
//设置元素节点的属性
type1.setAttribute("name","vivo x70");
//创建元素节点
Element type2 = document.createElement("type");
//设置元素节点的属性
type2.setAttribute("name","iqoo 855 pro");
//创建元素节点
Element type3 = document.createElement("type");
//设置元素节点的属性
type3.setAttribute("name","vivo y75s");
//将type1元素节点追加到brand元素节点里
brand.appendChild(type1);
//将type2元素节点追加到brand元素节点里
brand.appendChild(type2);
//将type3元素节点追加到brand元素节点里
brand.appendChild(type3);
//获取根节点
Element phoneInfo = (Element) document.getElementsByTagName("PhoneInfo").item(0);
//将brand元素节点追加到phoneInfo元素节点里
phoneInfo.appendChild(brand);
}
//删除xml信息
public void deleteXmlInfo(){
NodeList brand = document.getElementsByTagName("Brand");
for (int i = 0; i < brand.getLength(); i++) {
Node item = brand.item(i);
Element element = (Element) item;
if (element.getAttribute("name").equals("苹果")){
element.getParentNode().removeChild(element);
}
}
}
//修改xml信息
public void updateXmlInfo(){
NodeList brand = document.getElementsByTagName("Brand");
for (int i = 0; i < brand.getLength(); i++) {
Node item = brand.item(i);
Element element = (Element) item;
if (element.getAttribute("name").equals("华为")){
element.setAttribute("name","OPPO");
}
}
}
public static void main(String[] args) {
DomParseXml domParseXml = new DomParseXml();
//获取document对象
domParseXml.getDocument();
//增加xml信息
domParseXml.insertXmlInfo();
//删除xml信息
domParseXml.deleteXmlInfo();
//修改xml信息
domParseXml.updateXmlInfo();
//展示解析后的xml信息
domParseXml.showXmlInfo();
//另存为xml信息
domParseXml.saveXmlInfo();
}
}