1.XML在线学习手册
2.XML可以做什么
-
1.给两个程序之间进行数据通信。现在用的最多的是JSON。
-
2.给服务器做配置文件。
-
3.存储复杂的数据关系。
-
4.还可以充当小型的数据库。
3.书写格式
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="10021">
<name>张三</name>
<age>22</age>
<gender>男</gender>
<className>软工一班</className>
</student>
</students>
解释以上xml的格式
1.xml:表示该文件的类型 xml,放在第一行
2.version=“1.0” 表示版本
3.encoding="UTF-8"文件编码
4.students:它表示的是root元素/根元素,是由程序员自己来写的
5.student:表示students的一个子元素,可以有很多个。
6.id就是属性 name age gender className 是students元素的子元素。
7.在xml中也可以有注释<!---->
4.xml语法格式
1.每个xml文档必须有且只有一个根元素。
2.根元素是一个完全包括文档中其他所有元素的元素。
3.根元素的起始标记要放在所有其他元素的起始标记之前。
4.根元素的结束标记要放在所有其他元素的结束标记之后。
5.如果标签内没有内容,可以简写 <b></b> 可以简写为</b>
6.标签不允许交叉嵌套 <name>张三</name>,像这样就是不允许的。
7.区分大小写:比如:<email></email>和<Email></Email>这两个是不同的标签。
8.不能以数字开头,这个好理解,就不做解释了。
9.名称之间不能使用冒号":".
10.如果标签单词需要间隔,建议使用下划线,比如<book_name></book_name>
11.属性值 使用双引号(“”)或者是单引号('')分隔(如果属性值中有单引号(‘’),则用双引号("")分隔,有双引号(''),则用单引号分隔(‘’))
12.一个元素可以有多个属性,它的基本格式为:<元素名 属性名 = ""属性值">
13.特定的属性名称在同一个元素标记中只能出现一次。
14.属性值不能包括&字符。
5.什么是CDATA节
有些内容不想让解析引擎执行,而是当做原始内容,可以使用CDATA包括起来,CDATA节中的所有字符都会被当做简单文本,而不是XML标记。
语法:
<!CDATA[
这里就是可以把你输入的字符原样显示,不会解析xml
]]>
可以把你输入的字符原样输出,除了]]>。
也是不能嵌套的。
简单点来说:如果你希望吧某些字符串,当做普通文本,使用CDATA包括。
6.转义字符
表示一些特殊的字符。
转义符 | 符号 |
---|---|
$lt; | < |
$gt; | > |
$amp; | & |
$quot; | "" |
$apos; | '' |
7.DOM4j
不管是HTML文件还是xml文件,他们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
document对象表示的是整个文档。
第三方 XML解析技术
1.jdom在dom基础上进行了封装。
2.dom4j又对jdom进行了封装。
什么是DOM4j?
Dom4j是一个简单的灵活的开放源代码的库(主要是用于解析/处理XML文件)。Dom4j是由早期开发JDOM的人分离开发出来的。
与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但是它提供了比JDOM更好的灵活性。
Dom4j是一个优秀的Java XML API , 具有性能优异、功能强大和容易使用的特点。
使用Dom4j需要下载Dom4j相应的jar包。dom4j
获取Document对象的方式有三种
1.读取XML文件,获取document对象。
SAXReader reader = new SAXReader();//创建一个解析器
Document document = reader.read(new File("src/...xml"));//XML Document
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import java.io.File;
public class Dom4j_test {
public static void main(String[] args) throws DocumentException {
//加载XML文件
//得到一个解析器
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/students.xml"));
System.out.println(document);//org.dom4j.tree.DefaultDocument@2a0b20 [Document: name file:///C:/study/java/study_code/xml/src/students.xml]
}
}
2.解析XML形式的文本,得到Document对象。
String text = "<members></members>";
Document documnet = DocumentHelper.parseText(text);
3.主动创建Document对象。
Document document = DocumentHelper.createDocument();//创建根节点
Element root = document.addElement("members");
遍历xml中的元素
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="10021">
<name>张三</name>
<age>22</age>
<gender>男</gender>
<className>软工一班</className>
</student>
<student id="10022">
<name>李四</name>
<age>21</age>
<gender>女</gender>
<className>软工二班</className>
</student>
</students>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Dom4j_test {
public static void main(String[] args) throws DocumentException {
//加载XML文件
//得到一个解析器
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/students.xml"));
//遍历xml
//1.得到rootElement
Element rootElement = document.getRootElement();
List<Element> students = rootElement.elements();
for (Element student : students) {
//student元素的name ...
Element name = student.element("name");
Element age = student.element("age");
Element gender = student.element("gender");
Element className = student.element("className");
System.out.println("学生信息:" + name.getText() + ",年龄:" + age.getText() +
",性别:" + gender.getText() + ",班级:" + className.getText());
}
}
}
//学生信息:张三,年龄:22,性别:男,班级:软工一班
//学生信息:李四,年龄:21,性别:女,班级:软工二班
指定得到某一个学生
//获取第一个学生
Element student = (Element) rootElement.elements("student").get(0);
System.out.println("该学生的信息:"+student.element("name").getText()+student.element("age").getText()+"性别:" + student.element("gender").getText() + ",班级:" + student.element("className").getText());
获取元素的属性
//获取student的属性
System.out.println("id=" + student.attributeValue("id"));
完整代码:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Dom4j_test {
public static void main(String[] args) throws DocumentException {
//加载XML文件
//得到一个解析器
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/students.xml"));
//遍历xml
//1.得到rootElement
Element rootElement = document.getRootElement();
List<Element> students = rootElement.elements();
for (Element student : students) {
//student元素的name ...
Element name = student.element("name");
Element age = student.element("age");
Element gender = student.element("gender");
Element className = student.element("className");
System.out.println("学生信息:" + name.getText() + ",年龄:" + age.getText() +
",性别:" + gender.getText() + ",班级:" + className.getText());
}
//获取第一个学生
Element student = (Element) rootElement.elements("student").get(0);
System.out.println("该学生的信息:" + student.element("name").getText() + student.element("age").getText() + "性别:" + student.element("gender").getText() + ",班级:" + student.element("className").getText());
//获取student的属性
System.out.println("id=" + student.attributeValue("id"));
}
}
增加,删除,修改
添加一个学生:
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.*;
public class Dom4j_demo {
public static void main(String[] args) throws DocumentException, IOException {
//1.得到解析器
SAXReader reader = new SAXReader();
//2.指定解析哪个xml文件
Document document = reader.read("src/students.xml");
//首先先要创建一个学生节点对象
Element student = DocumentHelper.createElement("student");
//给元素添加属性
student.addAttribute("id", "10023");
Element student_name = DocumentHelper.createElement("name");
student_name.setText("王五");
Element student_age = DocumentHelper.createElement("age");
student_age.setText("23");
Element student_gender = DocumentHelper.createElement("gender");
student_gender.setText("男");
Element student_className = DocumentHelper.createElement("className");
student_className.setText("软工三班");
//把子元素添加到student下
student.add(student_name);
student.add(student_age);
student.add(student_gender);
student.add(student_className);
//在把student节点添加到根元素
document.getRootElement().add(student);
//直接输出会出现中文乱码
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//输出的编码为utf-8
//把xml进行更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), outputFormat
);
writer.write(document);
System.out.println("添加成功!!!!");
writer.close();
}
}
删除一个子节点(学生)
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
public class Dom4j_demo2 {
public static void main(String[] args) throws Exception {
//1.得到解析器
SAXReader reader = new SAXReader();
//2.指定解析的xml文件
Document document = reader.read(new File("src/students.xml"));
//3.找到该元素的第一个学生
Element student = (Element) document.getRootElement().elements("student").get(0);
//删除元素
student.getParent().remove(student);
//直接输出会出现中文乱码
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//输出的编码为utf-8
//把xml进行更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), outputFormat
);
writer.write(document);
System.out.println("删除成功!!!!");
writer.close();
}
}
修改一个子节点(学生)
把所有的学生加一
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class Dom4j_demo3 {
public static void main(String[] args) throws Exception {
//1.得到解析器
SAXReader reader = new SAXReader();
//2.指定解析的xml文件
Document document = reader.read(new File("src/students.xml"));
//得到所有学生的年龄
List<Element> students = document.getRootElement().elements("student");
for (Element student : students) {
Element age = student.element("age");
age.setText((Integer.parseInt(age.getText()) + 1) + "");
}
//直接输出会出现中文乱码
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//输出的编码为utf-8
//把xml进行更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), outputFormat
);
writer.write(document);
System.out.println("更新成功!!!!");
writer.close();
}
}
8.小结
感谢您花时间浏览本篇文章,本文章是笔者的学习笔记,如果您在学习当中发现了问题,还请您在评论区留言,笔者看到后会在第一时间处理,谢谢。