萬維網聯盟(W3C)
萬維網聯盟(W3C)創建於1994年,又稱W3C理事會。1994年10月在麻省理工學院計算機科學實驗室成立。建立者: Tim Berners-Lee (蒂姆·伯納斯·李)。是Web技術領域最具權威和影響力的國際中立性技術標准機構。到目前為止,W3C已發布了200多項影響深遠的Web技術標准及實施指南,
-
如廣為業界采用的超文本標記語言HTML(標准通用標記語言下的一個應用)、
-
可擴展標記語言XML(標准通用標記語言下的一個子集)
-
以及幫助殘障人士有效獲得Web信息的無障礙指南(WCAG)等
XML的全稱為(EXtensible Markup Language),是一種可擴展的標記語言標記語言: 通過標簽來描述數據的一門語言(標簽有時我們也將其稱之為元素)可擴展:標簽的名字是可以自定義的,XML文件是由很多標簽組成的,而標簽名是可以自定義的
-
作用
-
用於進行存儲數據和傳輸數據
-
作為軟件的配置文件
-
-
作為配置文件的優勢
-
可讀性好
-
可維護性高
-
<student>
標簽必須成對出現
<student> </student>
前邊的是開始標簽,后邊的是結束標簽
特殊的標簽可以不成對,但是必須有結束標記
<address/>
標簽中可以定義屬性,屬性和標簽名空格隔開,屬性值必須用引號引起來
<student id="1"> </student>
標簽需要正確的嵌套
這是正確的: <student id="1"> <name>張三</name> </student>
這是錯誤的: <student id="1"><name>張三</student></name>
語法規則
-
XML文件的后綴名為:xml
-
文檔聲明必須是第一行第一列
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>version:該屬性是必須存在的encoding:該屬性不是必須的
打開當前xml文件的時候應該是使用什么字符編碼表(一般取值都是UTF-8)
standalone: 該屬性不是必須的,描述XML文件是否依賴其他的xml文件,取值為yes/no
-
必須存在一個根標簽,有且只能有一個
-
XML文件中可以定義注釋信息
-
XML文件中可以存在以下特殊字符
< < 小於 > > 大於 & & 和號 ' ' 單引號 " " 引號
XML文件中可以存在CDATA區
<![CDATA[ …內容… ]]>
示例代碼
<?xml version="1.0" encoding="UTF-8" ?>
<!--注釋的內容-->
<!--本xml文件用來描述多個學生信息-->
<students>
<!--第一個學生信息-->
<student id="1">
<name>張三</name>
<age>23</age>
<info>學生< >>>>>>>>>>>的信息</info>
<message> <![CDATA[內容 <<<<<< >>>>>> ]]]></message>
</student>
<!--第二個學生信息-->
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
-
概述
xml解析就是從xml中獲取到數據
-
常見的解析思想
DOM(Document Object Model)文檔對象模型:就是把文檔的各個組成部分看做成對應的對象。會把xml文件全部加載到內存,在內存中形成一個樹形結構,再獲取對應的值

常見的解析工具
-
JAXP: SUN公司提供的一套XML的解析的API
-
JDOM: 開源組織提供了一套XML的解析的API-jdom
-
DOM4J: 開源組織提供了一套XML的解析的API-dom4j,全稱:Dom For Java
-
pull: 主要應用在Android手機端解析XML
解析的准備工作
-
-
我們可以通過網站:https://dom4j.github.io/ 去下載dom4j
-
將提供好的dom4j-1.6.1.zip解壓,找到里面的dom4j-1.6.1.jar
-
在idea中當前模塊下新建一個libs文件夾,將jar包復制到文件夾中
-
選中jar包 -> 右鍵 -> 選擇add as library即可
-
-
需求
-
解析提供好的xml文件
-
將解析到的數據封裝到學生對象中
-
並將學生對象存儲到ArrayList集合中
-
遍歷集合
-
-
<?xml version="1.0" encoding="UTF-8" ?>
<!--注釋的內容-->
<!--本xml文件用來描述多個學生信息-->
<students>
<!--第一個學生信息-->
<student id="1">
<name>張三</name>
<age>23</age>
</student>
<!--第二個學生信息-->
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
// 上邊是已經准備好的student.xml文件
public class Student {
private String id;
private String name;
private int age;
public Student() {
}
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
/**
* 利用dom4j解析xml文件
*/
public class XmlParse {
public static void main(String[] args) throws DocumentException {
//1.獲取一個解析器對象
SAXReader saxReader = new SAXReader();
//2.利用解析器把xml文件加載到內存中,並返回一個文檔對象
Document document = saxReader.read(new File("myxml\\xml\\student.xml"));
//3.獲取到根標簽
Element rootElement = document.getRootElement();
//4.通過根標簽來獲取student標簽
//elements():可以獲取調用者所有的子標簽.會把這些子標簽放到一個集合中返回.
//elements("標簽名"):可以獲取調用者所有的指定的子標簽,會把這些子標簽放到一個集合中並返回
//List list = rootElement.elements();
List<Element> studentElements = rootElement.elements("student");
//System.out.println(list.size());
//用來裝學生對象
ArrayList<Student> list = new ArrayList<>();
//5.遍歷集合,得到每一個student標簽
for (Element element : studentElements) {
//element依次表示每一個student標簽
//獲取id這個屬性
Attribute attribute = element.attribute("id");
//獲取id的屬性值
String id = attribute.getValue();
//獲取name標簽
//element("標簽名"):獲取調用者指定的子標簽
Element nameElement = element.element("name");
//獲取這個標簽的標簽體內容
String name = nameElement.getText();
//獲取age標簽
Element ageElement = element.element("age");
//獲取age標簽的標簽體內容
String age = ageElement.getText();
// System.out.println(id);
// System.out.println(name);
// System.out.println(age);
Student s = new Student(id,name,Integer.parseInt(age));
list.add(s);
}
//遍歷操作
for (Student student : list) {
System.out.println(student);
}
}
}
