目录
XML简介
XML(EXtensible Markup Language),可扩展标记语言
特点:
XML与操作系统、编程语言的开发平台无关
实现不同系统之间的数据交换
作用:
数据交互
配置应用程序和网站
Ajax基石
<?xml version="1.0" encoding="UTF-8"?> //声明
XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
XML编写注意事项
所有XML元素都必须有结束标签
XML标签对大小写敏感
XML必须正确的嵌套同级标签以缩进对齐
元素名称可以包含字母、数字或其他的字符
元素名称不能以数字或者标点符号开始
元素名称中不能含空格
dom4j解析XML
1.读取xml文件 SAXReader()
//将xml文件加载到内存中 XML解析器
SAXReader saxReader = new SAXReader();
//document 加载执行xml文档获取Document对象
Document document = saxReader.read(XML路径);
2.获取XML根节点getRootElement()
Element rootElement = document.getRootElement();
3.获取当前节点下所有子节点 elements()
//获取根节点下所有子节点
List<Element> Elist = rootElement.elements();
4.根据指定子元素名,获取元素下所有子节点
//获取节点名称为books下所有子节点
List<Element> Elist = rootElement.elements(“books”);
5.根据指定子元素名,获取子元素对象,如果重复,则获取第一个
//获取节点名称为books下单个子节点
Element element= rootElement.element(“books”);
6.设置元素文本内容 setText()
element.setText("内容");
7.获取当前节点文本内容 getText()
element.getText()
8.根据指定子元素名,获取元素中的文本
element.elementText(“book”)
9.获取当前节点属性 attributeValue(属性名)
element.attributeValue("name")
10.创建节点 Element对象.addElement("节点名")
Element element = rootElement.addElement("span");
11.节点添加,修改属性 Element对象.addAttribute("节点属性名",“属性值”)
element.addAttribute("type","属性值");
12.新XML添加 Document对象
通过DocumentHelper.creatDocument()创建一个Document对象
Document read = DocumentHelper.createDocument();
13.设置XML编码
通过OutputFormat的静态方法createPrettyPrint()创建OutputFormat对象,并设置编码集
OutputFormat
outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
14.写入XML文件
//写入XML文件的位置 以及指定的格式
XMLWriter xmlWriter=new XMLWriter(new FileWriter("cs.xml"),outputFormat);
//开始写入XML文件 写入Document对象
xmlWriter.write(document); xmlWriter.close();
/**
* XML工具类
* @author zy
*
*/
public class XMLUtils {
public Document doc = null;
public void loadDocument() {
//创建解析器类
SAXReader reader = new SAXReader();
//读取xml文件
try {
doc = reader.read("student.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
*添加
*/
public void addXML() throws Exception{
//创建一个空白Document对象
Document newdoc = DocumentHelper.createDocument();
Element root = newdoc.addElement("stus");
Element e1 = root.addElement("stu");
e1.addAttribute("id", "1001");
e1.addAttribute("name", "李四");
e1.addAttribute("age", "17");
Element e2 = root.addElement("stu");
e2.addAttribute("id", "1002");
e2.addAttribute("name", "王五");
e2.addAttribute("age", "17");
Element e3 = root.addElement("stu");
e3.addAttribute("id", "1003");
e3.addAttribute("name", "马三立");
e3.addAttribute("age", "17");
//将doc 重新保存
//指定编码格式
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileWriter("1.xml"),
of);
xmlWriter.write(newdoc);//写入
xmlWriter.close();
}
/**
* 删除
*/
public void deleteXML() throws Exception{
Element root = doc.getRootElement();
Iterator<Element> it =root.elementIterator();
while(it.hasNext()) {
//获得子集对象element,在拿到sage对象下的文本内容
Element stu = it.next();
String stuSage = stu.element("sage").getText();
//将字符串转换为int类型
int sage = Integer.parseInt(stuSage);
if(sage>18) {
//删除 父级删除子集 父级.remove(子集对象)
stu.getParent().remove(stu);
}
}
//将doc 重新保存
//指定编码格式
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileWriter("student.xml"),
of);
xmlWriter.write(doc);//写入
xmlWriter.close();
}
/**
* 修改
*/
public void updateXML() {
try {
//获得根节点
Element root = doc.getRootElement();
//新增子节点
Element stu = root.addElement("stu");
//给节点添加属性
stu.addAttribute("id", "1004");
stu.addElement("sname").setText("小美");
stu.addElement("sage").setText("19");
//将doc 重新保存
//指定编码格式
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileWriter("student.xml"),
of);
xmlWriter.write(doc);//写入
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查询节点
*/
public void showXML() {
//JAR java项目 java类 .class
try {
//获得根节点
Element root = doc.getRootElement();
//获得标签名称
System.out.println("根节点名称:"+root.getName());
//获得所有子节点
List<Element> list = root.elements();
for(Element e:list) {
//获得元素属性
String id = e.attributeValue("id");
System.out.println("学生学号:"+id);
//获得单个指定子节点
Element sname = e.element("sname");
Element sage = e.element("sage");
//获得元素文本内容
System.out.println("姓名:"+sname.getText());
System.out.println("年龄:"+sage.getText());
//获得指定名称的所有子节点
// List<Element> es = e.elements("sname");
// for(Element e1:es) {
// System.out.println(e1.getName());
// }
System.out.println("------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
XMLUtils xmlUtils = new XMLUtils();
try {
xmlUtils.addXML(); //添加
// xmlUtils.deleteXML(); //删除
// xmlUtils.loadDocument(); //创建解析器类,读取xml文件
// xmlUtils.updateXML(); //修改
// xmlUtils.showXML(); //查询
} catch (Exception e) {
e.printStackTrace();
}
}