1. 程式人生 > >xml的應用與開發

xml的應用與開發

返回 修改配置 sta 工廠 www. html 樹形結構 info 中文標簽

1.xml的應用

  *不同的系統之間的傳輸數據(qq消息傳輸)

  *用來表示生活中有關系的數據(省市區的包含關系)

  *經常用在文件配置

     **比如現在連接數據庫,肯定知道數據庫的名稱和密碼及用戶名。

     **如果修改數據庫信息,則無需修改源代碼,只需修改配置信息即可。

2.xml的申明

<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<a>a&lt;b</a>
<b>a&gt;b</b>
<c>&quot;a&lt;b&quot;</c>
<b>&apos;a&gt;b&apos;</b>
</person>
技術分享圖片

註:<?xml version="1.0"encoding="utf-8"?>必須要放在文件的首行,而且xml後必須要有一個空格,encoding前面也必須要有一個空格

  標簽的開始必須要有結束,規範性的。

  一個xml文件有且僅有一個根標簽,其他的標簽都是它的子標簽。

  在xml文件中會把空格和換行也當作內容來處理。

  xml文件是區分大小寫的。標簽不能以數字和下劃線開頭。

  xml標簽中不能包含空格和冒號,不能以xml開頭,標簽可以是中文。

對於大於小於號,雙引號,單引號等特殊字符需要進行轉義。但可以用CDATA區進行處理。

寫法:<![CDATA[ 內容 ]]>

<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<![CDATA[<a>a<b</a>
<b>a>b</b>
<c>"a<b"</c><d>‘a>b‘</d> ]]>
</person>
技術分享圖片

*PI指令用於指示顯示的樣式,用於引入css文件,但幾乎用不到。xml一般用於保存數據,PI指令只對英文起作用,對中文標簽不起作用。

3.xml約束

<?xml version="1.0" encoding="utf-8"?>
<person>
<name>baojuan</name>
<age>20</age>
<![CDATA[<a>a<b</a>
<b>a>b</b>
<c>"a<b"</c><d>‘a>b‘</d> ]]>
<貓>100</貓>
</person>
*人不可能擁有貓這個屬性,但這樣寫任然符合語法,所以可以運行,so需要一些規則來約束。
xml的約束:dtd約束 schema約束

<?xml version="1.0" encoding="utf-8"?>
<!--引入外部dtd文件<!DOCTYPE 根元素名稱 SYSTEM "dtd路徑">
<!DOCTYPE person SYSTEM "test.dtd">
-->


<!--內部dtd文件 <!DOCTYPE 根元素名稱[內容]>-->
<!DOCTYPE person[
<!--<!ELEMENT person (name+,age,sex,school,面積)>--> //+ 表示可以含有1到多個同樣的實體
<!ELEMENT person (name|age|sex|school|面積)> // | 表示枚舉,只能含列舉出的標簽中的任意一個
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex EMPTY> //EMPTY表示此標簽內必須為空
<!ELEMENT school ANY>
<!ELEMENT 面積 ANY> //ANY表示標簽內可以任意
]>

//(#PCDATA)之前必須要有空格。


<!-- 使用外部網絡上的dtd文件(struts.xml框架)
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<!DOCTYPE 根元素名稱 PUBLIC "DTD名稱""DTD文檔的URL">
-->
<person>
<name>baojuan</name>
<!--<age>20</age>
<sex></sex>
<school>4555</school>
<面積>dhhahs</面積>-->
</person>


4.xml的解析 (dom解析技術和sax解析技術)

**根據xml的層級結構在內存中分配一個樹形結構,把xml的標簽屬性文本都封裝成對象,使用dom來解析時,如果文件過大,會造成內存溢出。

優點:很方便實行增刪改操作。

**使用sax解析時,采用事件驅動,邊都變解析。從上到下依次解析,沒遇到一個對象,就把對象名稱返回,不會造成內存溢出,可以實現查詢,但不能進行增刪改操作。

想要解析xml,首先需要解析器,不同的公司提供了不同的解析器,通過api方式提供。

sun公司提供了jaxp解析器,dom4j組織提供了dom4j解析器(*****實際開發中常用*******),jdom組織提供了jdom解析器。

**jaxp解析器在jdk的javax.xml.parsers包裏面

四個類:針對dom和sax解析的四個類

    dom:documentBuilder:解析器類

       * 這個類是一個抽象類,不能new,只能使用DocumentBuilderFactory.newDocumentBuilder() 方法獲取。

       * 一個方法,可以解析xml,parse("xml路徑"),返回doucument整個文檔。

       * 返回的document是一個接口,父節點是node,如果在document裏找不到想要的方法,就要去node裏去找。

       * 在document裏,有一個方法,getElementsByTagName(String tagname)返回的是一個nodeList數組,可以得到標簽數組。

       * createElement(String tagName)方法創建一個標簽。

       * createTextNode(String data)方法創建一個文本。

       * appendChild(Node newChild)node接口中的方法,將文本添加到標簽下面。

       * removeChild(Node oldChild)刪除節點,但要經過父節點來刪。

       * getParentNode()獲取父節點

       * NodeList list

        getLength() //得到集合的長度

        item(int index) //根據下標取到具體的值

        for(int i=0;i<list.getLength();i++){

          list.item(i);

        }

       documentBuilderFactory:解析器工廠

       這個類是一個抽象類,不能new,只能通過newInstance()來獲得documentBuilderFactory的對象實例。

    sax:SAXParser:解析器類

       SAXParserFactory:解析器工廠

xml的應用與開發