1.eXtensible MarkUp Language
* 可擴充标記性語言
*用途:存儲資料
2.XML用途
*不同系統之間資料的傳輸
*有利于提高資料的維護性
3.XML文法
1)xml的文檔聲明:<?xml version="1.0" encoding="utf-8" ?> 寫在第一行第一列
ios8859-1(不包含中文的編碼方式)
*xml中文亂碼問題解決:設定編碼和儲存檔案的編碼保持一緻!
2)定義元素(标簽)
*标簽有開始必須有結束标簽
*标簽沒有内容可以在标簽内結束 <a/>
*标簽需要合理嵌套
*一個xml中隻能有一個根标簽
*在xml中會把空格和換行都當做内容來解析
**xml中标簽命名規則:
xml中區分大小寫、名稱不能以數字或者下劃線開頭、不能以xml、XML、Xml開頭、不能包含空格和冒号
3)xml屬性定義
4)xml注釋 :<!-- 注釋不能嵌套-->
5)xml中的特殊字元(一些轉義字元)
6)CDATA區:可以解決多個字元都需要轉義的操作
<![CDATA [ 内容 ] ]> 把特殊字元當做文本内容
7)PI指令:在XML中設定樣式,對中文标簽不起作用
4.xml限制
使得标簽内的内容符合正常的規範或者常識
xml限制技術:dtd限制 和schema限制
1)dtd限制:
--》看xml中有多少個元素,有幾個元素再dtd中寫多少個ELEMENT
--》判斷元素是簡單元素還是複雜元素(有子元素)
--》在xml中引入dtd檔案
<!DOCTYPE 根元素名稱 SYSTEM "DTD檔案路徑">
XML檔案 人:姓名、年齡
引入dtd檔案
<!DOCTYPE person SYSTEM "test.dtd">
<person>
<name>dzg</name>
<age>23</age>
</person>
test.dtd檔案内容:
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
2)dtd檔案的三種引入方式
*引入外部檔案
*内部dtd
<!ELEMENT person [
内容
]>
*引入外部的dtd檔案,網絡上的dtd檔案
5、DTD文法格式 <!ELEMENT 元素名 限制>
簡單元素:
*(#PCDATA)元素為字元串類型
* EMPTY 元素為空
* ANY 任意
複雜元素:
*表示子元素出現的次數 +:出現一次或者多次、*:0次或者多次、?:0次或者一次
w3c文檔有很多的執行個體
5.XML解析(*****)
xml解析方式:
1)dom方式
2)sax方式
想要解析XML檔案,首先要提供解析器,通過api方式提供
* sun公司提供 jaxp
*dom4j組織提供 dom4j(實際開發中使用最多)
Jdom提供的jdom
6.jaxp的api檢視
jaxp是java se的一部分
jaxp解析器在jdk在javax.xml.parsers包裡面
關于類中的方法檢視API文檔
四個類:分别針對dom和sax解析使用的類
***dom:
DocumentBuilder:解析器類
抽象類,不能new
此類的執行個體可以從DocumentBuilderFactory.newDocumentBuilder()方法擷取
DocumentBuilderFactory:解析器工廠
抽象類,不能new
newInstance()擷取DocumentBuilderFactoy的執行個體
***sax:
SAXParser:解析器類
SAXPaeserFactory:解析器工廠
JAXP解析xml檔案執行個體:
public class TestJaxp {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
/*
* 1.建立檔案解析工廠
* 2.根據解析工廠建立解析器
* 3.解析xml檔案傳回document
* 4.擷取所有name元素的值
* 5.傳回集合并周遊,輸出所有name
*/
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList nodeList = document.getElementsByTagName("name");
for(int i=0;i<nodeList.getLength();i++) {
Node node = nodeList.item(i);
String str = node.getTextContent();
System.out.println(str);
}
}
}
xml檔案内容
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1>
<name>zhangsan</name>
<age>23</age>
</p1>
<p1>
<name>wangba</name>
<age>23</age>
</p1>
</person>
7.使用jaxp添加節點
修改标簽内容
删除标簽節點
周遊标簽節點