1.XML的基本概念
定义:xml(Extensible Markup Language),可扩展标记语言
XML是一种数据的格式,和JSON差不多,可以用这种数据格式来存储和表示一组数据,又一系列的标签组成。
2.XML基本结构
格式良好的 XML 文档
2.XML文档优势
n XML基于文本格式,具有简单性、可扩展性、交互性和灵活性
xml格式一般在项目中做配置文件 Web项目中都可以用xml格式作为配置文件!
还可以不同站点之间作为一种通用的数据交换格式使用,例如webservice…
另外也可以存储少量的数据,类似于数据库的功能,大量的数据库就会存储数据库了!!
3.解析XML文档
XML文件有多种解析方式:
(1) DOM解析 (SUN公司内置)
(2)SAX解析(安卓开发)
(3)JDOM
(4) DOM4J解析(需要导入相关的Dom4J的包,可以再官方网站下载)
XML代码的增删改查:
XML文件的读取:
得到标签属性值的方法为: attribute("") ps:Attribute attribute = l.attribute(“id”);
得到标签的方法:getName() ps: String name = element.getName();
得到标签内的值得方法为: getText() ps:String ID = attribute.getText();
其中涉及到的String类型转换为基本数据类型 ps:Interger.parseInt()
基本数据类型转换为String类型: ps:String.valueof()
package com.dream.XML;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.dream.bean.Stu;
/*
-
XML文件的读取
*/
public class ReaderXml {
public static void main(String[] args) throws Exception {
//将返回的集合复制给stu
List stu=XMLReader();
for(Stu l :stu){
System.out.println(l);
}}
public static List XMLReader(){
List li = new ArrayList<>(); //创建空集合用来存放信息
//创建解析器对象
SAXReader reader = new SAXReader();
//获得XML文件信息
Document document;
try {
document = reader.read(“stu.xml”);
//获得XML文件的根节点
Element re = document.getRootElement();//获得根节点下面的子节点 并存到集合中 List<Element> list = re.elements(); for(Element l : list){ //获得元素属性为id Attribute attribute = l.attribute("id"); //获得元素属性为ID的值 String ID = attribute.getText(); //创建学生对象 Stu stu = new Stu(); //将ID放在学生对象中 stu.setId(Integer.parseInt(ID)); //获得子节点下的节点 List<Element> e = l.elements(); //遍历子节点 for(Element element:e){ //获得子节点下节点的属性 String name = element.getName(); //获得子节点写节点的值 String value = element.getText(); if("name".equals(name)){ stu.setName(value); } if("age".equals(name)){ //String 类型的value转换为int类型 stu.setAge(Integer.parseInt(value)); } if("weight".equals(name)){ stu.setWeight(Double.parseDouble(value)); } // System.out.println(name +" " + value); } // System.out.println("==========="); li.add(stu); } } catch (DocumentException e1) { } return li;
}
}增 XML文档
package com.dream.XML;
import java.io.FileWriter;
import java.util.Scanner;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*
-
增加XML文件的信息
-
创建一个新标签用addElement() Element stuElement = re.addElement(“student”);
-
设置一个标签里的属性用 addAttribute(); stuElement.addAttribute(“id”, String.valueOf(id));
-
设置标签的标签值 为 setText() addElement.setText(name);
*/
public class AddXML {
public static void main(String[] args) throws Exception {Scanner scanner = new Scanner(System.in); System.out.print("请输入你要添加的学生ID:"); int id =scanner.nextInt(); System.out.print("请输入你要添加的学生名字:"); String name =scanner.next(); System.out.print("请输入你要添加的学生年龄:"); int age =scanner.nextInt(); System.out.print("请输入你要添加的学生体重:"); double weight =scanner.nextDouble(); //创建相应的对象 SAXReader reader = new SAXReader(); //读取XML文件 Document document = reader.read("stu.xml"); //获得根节点 Element re = document.getRootElement(); //增加根节点下的字节点 Element stuElement = re.addElement("student"); //设置根节点属性 stuElement.addAttribute("id", String.valueOf(id)); //创建一个标签 Element nameElement = stuElement.addElement("name"); //设置标签值 nameElement.setText(name); //创建一个标签 Element ageElement = stuElement.addElement("age"); //设置标签值 ageElement.setText(String.valueOf(age)); //创建一个标签 Element weightElement = stuElement.addElement("weight"); //设置标签值 weightElement.setText(String.valueOf(weight)); // -------------内存中Document对象修改之后,需要保存回去 路径还是原来路径 覆盖了以前的文件--------------- OutputFormat outputFormat = OutputFormat.createPrettyPrint(); outputFormat.setEncoding("GBK"); XMLWriter xmlWriter = new XMLWriter(new FileWriter("stu.xml"),outputFormat); xmlWriter.write(document); xmlWriter.close(); System.out.println("学生添加成功");
}
}
删 XML文档:
package com.dream.XML;
import java.io.FileWriter;
import java.util.List;
import java.util.Scanner;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*
-
XML文件的删除节点
*/
public class DeleteXml {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
System.out.print(“输入你想删除的编号:”);
int id = scan.nextInt();//创建相应的对象
SAXReader reader = new SAXReader();
//讀取XML文件
Document document = reader.read(“stu.xml”);
//获得XML文件的根节点
Element root = document.getRootElement();
//获得根节点下的字节点
List childs = root.elements();
//遍历
for (Element e : childs) {
//得到属性id
Attribute attribute = e.attribute(“id”);
//得到id对应的值
String text = attribute.getText();if(text.equals(String.valueOf(id))){ root.remove(e); }
}
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding(“GBK”);XMLWriter writer = new XMLWriter(new FileWriter(“stu.xml”),of);
writer.write(document);
writer.close();
System.out.println(“删除完成!”);
}
}
改 XML文档:
/**
*
- @time 2019年5月28日下午2:48:52
- @Description
*/
package com.dream.XML;
import java.io.FileWriter;
import java.util.List;
import java.util.Scanner;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
*
-
@time 2019年5月28日下午2:48:52
-
@Description 貂蝉老了一岁,请把貂蝉的岁数+1
*/
public class UpdateXML {public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader(); Document document = reader.read("stu.xml"); Scanner scanner = new Scanner(System.in); Element root = document.getRootElement(); List<Element> childs = root.elements();// 孩子的集合 System.out.println("输入要修改的ID值:"); int loca = scanner.nextInt(); for (Element c : childs) { Attribute attribute = c.attribute("id"); String value = attribute.getText();// 获取ID的属性值 if (String.valueOf(loca).equals(value)) { // 找到标签 List<Element> list = c.elements(); System.out.println("输入要修改的标签名字:"); for (Element e : list) { String alterName = scanner.nextLine(); String name = e.getName();// 标签名字 if (alterName.equals(name)) { String age = e.getText(); System.out.println("貂蝉原来的年龄:" + age); e.setText(String.valueOf(Integer.parseInt(age) + 1)); } } } } // 因为在修改后 需要保存XML // -------------内存中Document对象修改之后,需要保存回去 路径还是原来路径 // 覆盖了以前的文件--------------- OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); // 本质工作空间的编码格式是GBK XMLWriter writer = new XMLWriter(new FileWriter("stu.xml"), format); writer.write(document); writer.close(); System.out.println("学生更新成功!!!");
}
}