1.什麼是XMLhtml
java
XML 是一種標記語言,很相似 HTMLweb
XML 的設計宗旨是傳輸數據,而非顯示數據(webservice)spring
XML 標籤沒有被預約義。您須要自行定義標籤。數據庫
XML 被設計爲具備自我描述性。數組
XML 是 W3C 的推薦標準app
XML能夠存儲數據(小型數據庫)框架
XML能夠做爲框架的配置問 web.xml applicationContext.xml(spring的配置文件) ,hibernate.cfg.xmldom
2.XML與HTML的主要區別
性能
3.XML語法
4.XML命名規則
名稱能夠含字母、數字以及其餘的字符
名稱不能以數字或者標點符號開始
名稱不能以字符 「xml」(或者 XML、Xml)開始
名稱不能包含空格
可以使用任何名稱,沒有保留的字詞。
5.特殊字符
< | "<" | 小於 |
> | > | 大於 |
& | & | 和號 |
' | ' | 單引號 |
" | " | 引號 |
2.XML解析
文檔:
根據xml文件建立對應的類
3.Dom4解析
3.1什麼是Dom4j
3.2 核心類
SAXReader Demo4讀取文件的類
read 讀取指定的xml文件
Document 文檔類 用於加載指定的文檔
經常使用方法:
getRootElement 獲取根節點
Element 標籤類,元素
經常使用方法:
elements 獲取全部的直接子標籤
attribute 獲取指定屬性名稱的屬性對象
elementText 獲取指定子標籤名稱的文本內容
element 獲取指定標籤名稱的標籤對象
getText(); 獲得當前標籤中間的文本
3.3 實現xml解析
4.SAX解析
4.1 什麼是SAX
SAX,全稱Simple API for XML,既是一種接口,也是一種軟件包。它是一種XML解析的代替方法。SAX不一樣於DOM解析,它逐行掃描文檔,一邊掃描一邊解析。因爲應用程序只是在讀取數據時檢查數據,所以不須要將數據存儲在內存中,這對於大型文檔的解析是個巨大優點
dom:把XML文件讀取到內容,構建樹形結構
SAX的優勢:
解析速度快
佔用內存少
SAX的缺點:
沒法知道當前解析標籤(節點)的上層標籤,及其嵌套結構,僅僅知道當前解析的標籤的名字和屬性,要知道其餘信息須要程序猿本身編碼
只能讀取XML,沒法修改XML
沒法隨機訪問某個標籤(節點)
SAX解析適用場合
SAX解析適用場合 對於CPU資源寶貴的設備,如Android等移動設備對於只需從xml讀取信息而無需修改xml
4.3 代碼實現
建立自定義處理數據的模板類
繼承DefaultHandler類
從新四個方法
startDocument();解析到xml文件的開始
startElement();解析到標籤的開頭 <book>
endElement(); 解析到標籤結尾</book>
character(); 解析到標籤中間的文本
代碼:
public classMyBookHandler extends DefaultHandler
{/* 聲明解析後存儲對象的集合*/
private Book book;
private List<Book>books;
private String tagName;//當前解析的標籤
public list<Book> getBooks(){
return books;
}
public void startDocument() throws SAXException{
System.out.println("文檔的開始");
}
public void endDocument()throws SAXException{
System.out.println("文檔的結束");
}
/*解析到標籤的開頭String qName 解析到的標籤的名稱<book id="1001">
Attributes attributes 當前這個標籤中的屬性 id="1001" */
public void startElement (String uri,String localName,String qName,Attributes attributes) throws SAXException{
if("books".equals(qName)){
books=new ArrayList<>();
}else if("book".equals(qName)){
book=new Book();
String ids=attributes.getValue("id");
String date=attributes.getValue("publishdate");
book.setId(Integer.parseInt(ids));
book.setPublishdate(date);
}
tagName=qName;
}
/*解析到標籤的結尾
@param uri
@param localName
@param qName
@throws SAXEXception */
public void endElement(String uri,String locatiion,String qName)throws SAXException{
//Sysem.out.println(「標籤的結尾」+qName);
tagName=" ";
if("book"equals (qName))
{
book.add(book);
}
/*** 解析到文本
* @param ch
* @param start
* @param length
* @throws SAXException */
public void characters(char[] ch, int start, int length) throws SAXException {
// 把char類型的數組--->string
String content = new String(ch,start,length);
//System.out.println(content);//有可能獲得換行符或者空格
content = content.trim();
//System.out.println("處理後:"+content+"---標籤"+tagName);
//book.setName(content);
if ("name".equals(tagName)) {//""
book.setName(content);
}else if("author".equals(tagName)) {
book.setAuthor(content);
}else if("price".equals(tagName)) {
//book.setPrice(Double.parseDouble(content));
}
}
使用SAX進行解析
僞代碼:
具體代碼:
dom解析:xml文件加載到內存中,在內存中構建樹形結構,文件比較大,不建議使用DOM解析
核心API:
DocumentBuilderFactory
DocumentBuilder
Document xml文檔
Node xml文件中的一個節點(標籤節點,屬性節點,空格或者註釋等也是Node對象)
getNodeName(); 標籤名稱
getNodeValue(); 屬性值
getAttributes() ; 獲得屬性列表
getTextContent();標籤中的文本
NodeList: 子節點列表
Attribute 屬性對象