xml 名称中不能包含= 字符_可扩展标记语言:XML
XML技術(DOM、SAX解析XML)
1 掌握XML基本語法,命名規則
2 掌握什么是Schema,什么是DTD
3 掌握DOM解析XML
4 掌握SAX解析XML
5 掌握JDOM解析XML
6 掌握DOM4J解析XML
首先來寫第一個簡單的XML文檔
以XML保存,打開瀏覽器,把文檔拉到地址欄。如果出現這種情況證明你的XML書寫是正確的。
1. XML(EXtensible Markup Language)概念和體系
(1) XML的特點:
XML的作用:數據存儲和數據傳輸。XML的特點:數據以純文本格式存儲、實現不同應用程序之間的數據通信、實現不同平臺間的數據通信、實現不同平臺間的數據共享、使用XML將不同的程序不同的平臺之間聯系起來。
(2) 一個標準的XML文檔由什么組成?
必須要有文檔的聲明,根元素(一個文檔只能有一個根元素),根元素的子元素,文本(在xml中文本都是字符型)。
就剛剛寫的book文檔而言,books是book的父元素,book是books的子元素,XML的結構如下,這是一顆倒掛著的樹:
2. XML基本語法:
① 有且只有一個根元素
② XML文檔聲明必須放在文檔的第一行
③ XML的標簽必須成對出現
④ XML的標簽嚴格區分小寫
⑤ XML必須正確嵌套
⑥ XML中屬性值必須加引號
⑦ XML中,一些特殊字符需要使用“實體”
⑧ XML中可以應用適當的注釋
XML的命名規則:
名稱可以包含字母,數字以及其他字符。
名稱不能以數字或標點符號開始,名稱不能包含空格。
3. Schema技術:
(1) 什么是DTD驗證及DTD驗證的局限性?
DTD文檔類型定義,驗證是否是“有效”的XML。
使用DTD的局限性:DTD不遵守XML語法、DTD數據類型有限、DTD不可擴展、不支持命名空間。
(2) 什么Schema技術?
Schema是DTD的代替者,名稱為 XML Schema ,用于描述XML文檔結構,比DTD強大,最主要的特征之一就是XML Schema 支持數據類型。
① Schema是用XML驗證XML遵循XML的語法。
② Schema可以用作處理XML文檔的工具處理。
③ Schema大大擴充了數據類型,而且還可以自定義數據類型。
④ Schema支持元素的繼承
4. DOM方式解析XML數據
(1) 解析XML文件的方式有哪些:
① DOM解析(官方提供)
② SAX解析(官方提供)
③ JDOM解析(第三方提供)
④ DOM4J解析(第三方提供)
(2) DOM解析XML的步驟:
① 創建一個DocumentBuilderFactory的對象
② 創建一個DocumentBuilder對象
③ 通過該DocumentBuilder的parse方法的都Document對象
④ 通過getElementsByTagName(...)方法獲取到節點的列表
⑤ 通過for循環遍歷每一個節點
⑥ 得到每個節點的屬性與屬性值
⑦ 得到每個節點的節點名與節點值
>>>使用DOM解析XML文檔(把XML中的數據讀取到Java程序中)使用之前的book文檔Java程序:package XML;import java.io.IOException;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;public class TestDOMParse {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {//創建一個DocumentBuilderFactory的對象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//創建一個DocumentBuilder對象DocumentBuilder db = dbf.newDocumentBuilder();//通過DocumentBuilder的parse方法的到Document對象Document doc = db.parse("book.xml"); //通過getElementsByTagName方法獲取節點的列表NodeList bookList = doc.getElementsByTagName("book");//通過for循環遍歷每一個節點for(int i=0;i<bookList.getLength();i++) {//得到每一個屬性與屬相值Node book = bookList.item(i);NamedNodeMap attrs = book.getAttributes();//循環遍歷每一個屬性for(int j=0;j<attrs.getLength();j++) {//獲得每一個屬性Node id = attrs.item(j);System.out.println("屬性的名稱"+id.getNodeName()+"t"+id.getNodeValue()); } }System.out.println("n每個節點的名和節點值");//得到每一個節點與節點值for(int i=0;i<bookList.getLength();i++) {//得到每個節點book節點Node book = bookList.item(i);NodeList subNode = book.getChildNodes();System.out.println("子節點的個數:"+subNode.getLength());//使用for循環遍歷每一book的子節點for(int j=0;j<subNode.getLength();j++) {Node childNode = subNode.item(j); // System.out.println(childNode.getNodeName());short type = childNode.getNodeType();//獲取節點的類型if (type==Node.ELEMENT_NODE) {System.out.println("節點的名稱:t"+childNode.getNodeName()+"t"+childNode.getTextContent());}}}} }運行之后得到的結果是醬紫的:這時候已經將XML文檔中的數據讀取出來了5. SAX方式解析XML數據
(1) SAX解析方式:
SAX(Simple API for XML),是一種以事件驅動的XML API,SAX與DOM不同的是它邊掃描邊解析,
自頂向下依次解析,由于邊掃描邊解析,所以它解析XML具有速度快,占用內存少的優點。
(2) SAX解析XML的步驟:
① 創建SAXParserFactory的對象
② 創建SAXParser對象(解析器)
③ 創建一個DefaultHandler的子類
④ 調用parse方法
老規矩,實操一下。創建一個子類BookDeaultHandler繼承DefaultHandler(org.xml.sax.helpers.DefaultHandler;)是這個包下的DefaultHandlerpackage XML;import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;public class BookDeaultHandler extends DefaultHandler {//重寫第一個方法/*解析xml文檔開始時調用*/@Overridepublic void startDocument() throws SAXException {super.startDocument();System.out.println("------解析xml文檔開始--------");}/*解析xml文檔結束時調用*/@Overridepublic void endDocument() throws SAXException {super.endDocument();System.out.println("------解析xml文檔結束--------");}/**解析xml文檔中的節點時調用*/@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);/**判斷如果是book節點,獲取節點的屬性與屬性值*/if("book".equals(qName)) {//獲取所有的屬性int count = attributes.getLength();//屬性的個數//循環獲取每個屬性for(int i=0; i<count;i++) {String attName = attributes.getQName(i);//屬性名稱String attValue = attributes.getValue(i);System.out.println("屬性名稱:"+attName+"t屬性值:"+attValue);}}else if(!"books".equals(qName)&&!"book".equals(qName)) {System.out.print("節點的名稱:t "+qName+"t");}}/**解析xml文檔中的節點結束調用*/@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);String value = new String(ch,start,length);if(!"".equals(value.trim())) {System.out.println(value);}} }主程序:package XML;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class TestSAXParse {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {//創建SAXParserFactory的對象SAXParserFactory spf = SAXParserFactory.newInstance();//創建SAXParser對象(解析器)SAXParser parser = spf.newSAXParser();//創建一個DefaultHandler的子類BookDeaultHandler bdh = new BookDeaultHandler();//調用parse方法parser.parse("book.xml",bdh);} }運行結果是這樣子的:6. JDOM解析XML數據
(1) 簡述什么是JDOM?
是一種解析xml的Java工具包,它基于樹型結構,利用純Java的技術對xml文檔實現解析。
(2) JDOM解析XML的步驟?
① 創建一個SAXBuilder對象
② 調用build方法,得到Document對象(通過IO流)
③ 獲取根節點
④ 獲取根節點節點的直接子節點的集合
⑤ 遍歷集合
7. DOM4J解析XML數據
(1) 簡述DOM4J技術 ?
是一個Java的XML API,是JDOM的升級品,用來讀寫XML文件。
(2) 四種解析XML技術的特點:
① DOM解析:形成了樹結構,有助于更好的理解、掌握,且代碼容易編寫,解析過程中,樹結構保存在內存中,方便修改。
② SAX解析:采用事件驅動模式,對內存消耗比較小適用于只處理XML文件中的數據。
③ JDOM解析:僅使用具體類,而不使用接口,API大量使用了Collection類。
④ DOM4J解析:是JDOM的一種智能分支,他合并了許多超出基本XML文檔表示的功能。它使用接口和抽象基本類方法。具有性能優異、靈活性好、功能強大和極端易用的特點。是一個開放源碼的文件。
總結
以上是生活随笔為你收集整理的xml 名称中不能包含= 字符_可扩展标记语言:XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy pytorch 接口对应_拆
- 下一篇: ale插件 vim_Vim之代码异步检测