1.XML在线学习手册
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.得到rootElementElement 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.得到rootElementElement 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.小结
感谢您花时间浏览本篇文章,本文章是笔者的学习笔记,如果您在学习当中发现了问题,还请您在评论区留言,笔者看到后会在第一时间处理,谢谢。