第二章XML
XMl
- XML簡介
- XML的文檔結構
- XMl的應用
- XML解析
- 1.DOM
- 使用DOM 讀取XML數據
- 使用DOM維護XML數據
- 2.SAX
- 3.JDOM
- 4.DOM4J
- 使用DOM4j解析XML
- XML總結
XML簡介
XML的文檔結構
1.XML聲明
2.XML標簽
3.元素
元素由開始標簽,結束標簽和元素內容組成。元素內容指開始標簽和結束標簽之間的內容,可以包含子元素,字符數據等。
元素的命名規則如下
- 名稱中可以包含字母數字,或者其他符號。
- 名稱不能一數字或標點符號開始是。
- 名稱不能以字符“”XML“(或者XML,XmL)開始。
- 名稱不能包含空格
4.根元素
根元素的特點
- 根元素是一個完全包括文檔中其他所有元素的元素。
- 根元素的起始標簽要放在所有其他元素的起始標簽之前。
- 根元素的結束標簽要放在所有其他元素的結束標簽之后。
5.屬性
6.xml中的特殊字符的處理
7.文檔要求
XMl的應用
xml的應用場景主要體現在以下幾點
1.數據存儲
2.數據交換
3.數據配置
XML解析
目前常用的解析技術有四種
1.DOM
DOM把XML文件映射成一顆倒掛的數,已根元素為根節點,每一個節點都已對象形式存在,通過存取這些對象就能存取XML文檔的內容
使用DOM 讀取XML數據
/*解析XML文件*///創建解析器工廠對象DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//獲得解析對象DocumentBuilder builder=factory.newDocumentBuilder();//加載要解析的XML文件Document doc=builder.parse(new File("手機信息.xml"));//構建DOM樹//操作DOM樹: 讀取,修改,添加,刪除../*getLength():獲得節點個數Item():獲得節點集合中的第N個節點getElementsByTagName(): 根據標簽名獲得指定的標簽[子標簽,父標簽]getAttribute((): 獲得當前標簽的指定屬性的值getTextContent(): 獲得當前標簽的文本內容/*NodeList brands=doc.getElementsByTagName("Brand");//根據標簽名獲得標簽節點for (int i = 0; i < brands.getLength(); i++) {//節點: 標簽,屬性節點,文本節點Element brand=(Element) brands.item(i);//Brand屬于標簽節點String name=brand.getAttribute("name");//el.getChildNodes();NodeList types=brand.getElementsByTagName("Type");for(int j = 0; j < types.getLength(); j++) {Element type=(Element) types.item(j);//Node向下轉型為ElementString typeName=type.getAttribute("name");//獲得type標簽的name屬性值String price=type.getTextContent();//獲得當前標簽的文本內容System.out.println("手機名:"+name+" 型號:"+typeName+" 價格:"+price);}}
使用DOM維護XML數據
//創建解析器工廠對象DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//獲得解析對象DocumentBuilder builder=factory.newDocumentBuilder();//加載要解析的XML文件Document doc=builder.parse(new File("手機信息.xml"));//構建DOM樹//新增節點: 標簽節點,屬性節點,文本節點Element newBrand=doc.createElement("Brand");//<Brand></Brand>newBrand.setAttribute("name", "小米");//<Brand name="小米"></Brand>Element newType=doc.createElement("Type");//<Type></Type>newType.setAttribute("name", "Mi10");//<Type name="Mi10"></Type>newType.setTextContent("2999元");//<Type name="Mi10">2999元</Type>//將子標簽添加到父標簽中newBrand.appendChild(newType);//<Brand name="小米"><Type name="Mi10">2999元</Type></Brand>//修改節點: 屬性,文本newType.setAttribute("name","mi11");newType.setTextContent("1999元");//刪除節點: 標簽節點,屬性節點,文本節點newType.removeAttribute("name");newType.setTextContent("");//文本默認為""//newType.getParentNode().removeChild(newType);//刪除當前節點Node parentNode=newType.getParentNode();parentNode.removeChild(newType);//添加節點到DOM樹doc.getElementsByTagName("PhoneInfo").item(0).appendChild(newBrand);//存儲XML信息DOMSource domSource=new DOMSource(doc);//設置DOM信息Result rs=new StreamResult(new FileOutputStream(new File("新的手機信息.xml")));//信息存儲位置//格式轉換對象//創建格式轉換工廠對象TransformerFactory ttf=TransformerFactory.newInstance();//獲得格式轉換對象Transformer transformer=ttf.newTransformer();//設置轉換格式transformer.setOutputProperty(OutputKeys.VERSION, "1.0");transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//轉換: 將DOM信息,轉到磁盤文件中transformer.transform(domSource, rs);2.SAX
SAX是基于時間的解析,他是解決DOM解析的資源消耗而出現的,它不像DOM那樣需要建立一顆完整的文檔樹,而是通過時間處理器完成對文檔的解析, 以為SAX解析不用事先調入整個文檔,所以他的優勢就是占用資源少,消耗內存小,一般在解析數據量大的XML文檔是會采用。
3.JDOM
4.DOM4J
使用DOM4j解析XML
XML總結
總結