天天看點

XML學習一

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學習一

  想要解析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添加節點

   修改标簽内容

 删除标簽節點

 周遊标簽節點