1.XML的簡介css
XMLhtml |
HTMLnode |
EXtensible Markup Languageweb 可擴展標記語言,可自定義標籤app (1)名稱中能夠包含字母、數字、下劃線、減號,但不能以數字、減號開頭dom (2)不能以xml開頭,不管是大寫仍是小寫都不能夠ui (3)不能包含空格 編碼 |
Hypertext markuplanguagespa 超文本標記語言,固定標籤orm |
嚴格區分大小寫 |
不區分大小寫 |
全部的標籤必須成對出現,且標籤不能交叉嵌套 |
大多的標籤是成對出現,但也有不成對出現的標籤,如<br> |
文檔聲明必須爲<?xml開頭,以?>結束 |
html無此要求 |
標籤結構:開始標籤、元素體、結束標籤 |
標籤結構:開始標籤、元素體、結束標籤 |
屬性是元素的一部分,它必須出如今元素的開始標籤中,一個元素能夠有0~N個屬性,但一個元素中不能出現同名屬性 |
屬性沒必要出如今元素的開始標籤中,能夠放在css文件中,或者內聯css |
註釋以「<!--」開始,以「-->」結束 |
註釋以「<!--」開始,以「-->」結束 |
用來存儲數據或配置文件 |
用來解析顯示頁面 |
2.XML中經常使用的轉義字符
大於號(>)
小於號(<)
雙引號(")
單引號(')
&號(&s;)
備註:當大量的轉義字符出如今xml文檔中時,會使xml文檔的可讀性大幅度下降。這時若是使用CDATA段就會好一些。
在CDATA段中出現的「<」、「>」、「」」、「’」、「&」,都無需使用轉義字
符。CDATA的格式:<![CDATA[ 要顯示的內容 ]]>
3.XML約束
DTD約束 |
Schema約束 |
DTD(Document Type Definition),文檔類型定義,用來約束XML文檔。 |
Schema是新的XML文檔約束;要比DTD強大不少; Schema自己也是XML文檔,但Schema文檔的擴展名爲xsd,而不是xml。 |
內部DTD:在XML文檔內部嵌入DTD,只 對當前XML文檔有效; 外部DTD:獨立的DTD文件,擴展名爲.dtd; <!DOCTYPE students SYSTEM「stud.dtd」> |
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/demo" elementFormDefault="qualified"> <element name="bookstore"> <complexType> <!—包含元素或屬性的標籤--> <sequence maxOccurs="3" minOccurs="1"><!—至少出現1次,最多3次--> <element name="book"> <complexType> <sequence> <element name="title"> <complexType> <simpleContent> <extension base="string"> <attribute name="lang" type="string"></attribute> </extension> </simpleContent> </complexType> </element> <element name="author" type="string"></element> <element name="year" type="date"></element> <element name="price" type="double"></element> </sequence> <attribute name="category" type="string" use="required"></attribute> </complexType> </element> </sequence> </complexType> </element> </schema> |
內部示例: <!ELEMENT students (student+)> <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> |
|
使用*、+、?來指定子元素出現的次數 *:能夠出現0~N次; +:能夠出現1~N次; ?:能夠出現0~1次。 |
4.XML的解析
在xml的解析中主要講解了dom4j
4.1 dom4j的快速入門:
//第一步:建立解析對象
SAXReader sr=new SAXReader();
//第二步:讀取相應的XML文件,read中的內容爲須要讀取的xml文件的路徑
Document doc=sr.read(「*******」);
//第三步:獲得相應的根元素
Element root=doc.getRootElement();
//再調用其餘方法,獲取子元素
4.2 Xpath的快速入門
//第一步:建立解析對象
SAXReader reader = new SAXReader();
//第二步:讀取xml文件
Document doc=reader.read(「*****」);
//第三步:獲得要求的結點(Nodes或singleNode)
demo1:
List<Element> elements = document.selectNodes("//year");
//該方法是得到全部year標籤
for(Element ele:elements){
System.out.println(ele.getText());
}
demo2:
Element ele = (Element) document.selectSingleNode("//book[@category='WEB']/price");
//該方法是獲取屬性名爲category,屬性值爲web的book標籤下的price標籤,結果是單個標籤
System.out.println(ele.getText());
dom4j中經常使用的方法:
Node方法:
l String asXML():把當前節點轉換成字符串,若是當前Node是Document,那麼就會把整個XML文檔返回;
l String getName():獲取當前節點名字;Document的名字就是綁定的XML文檔的路徑;Element的名字就是元素名稱;Attribute的名字就是屬性名;
l Document getDocument():返回當前節點所在的Document對象;
l short getNodeType():獲取當前節點的類型;
l String getNodeTypeName():獲取當前節點的類型名稱,例如當前節點是Document的話,那麼該方法返回Document;
l String getStringValue():獲取當前節點的子孫節點中全部文本內容鏈接成的字符串;
l String getText():獲取當前節點的文本內容。若是當前節點是Text等文本節點,那麼本方法返回文本內容;例如當前節點是Element,那麼當前節點的內容不是子元素,而是純文本內容,那麼返回文本內容,不然返回空字符串;
l void setDocument(Document doc):給當前節點設置文檔元素;
l void setParent(Element parent):給當前節點設置父元素;
l void setText(String text):給當前節點設置文本內容;
Branch方法:
l void add(Element e):添加子元素;
l void add(Node node):添加子節點;
l void add(Comment comment):添加註釋;
l Element addElement(String eleName):經過名字添加子元素,返回值爲子元素對象;
l void clearContent():清空全部子內容;
l List content():獲取全部子內容,與獲取全部子元素的區別是,<name>liSi</name>元素沒有子元素,但有子內容;
l Element elementById(String id):若是元素有名爲「ID」的屬性,那麼可使用這個方法來查找;
l int indexOf(Node node):查找子節點在子節點列表中的下標位置;
l Node node(int index):經過下標獲取子節點;
l int nodeCount():獲取子節點的個數;
l Iterator nodeIterator():獲取子節點列表的迭代器對象;
l boolean remove(Node node):移除指定子節點;
l boolean remove(Commont commont):移除指定註釋;
l boolean remove(Element e):移除指定子元素;
l void setContent(List content) :設置子節點內容;
Document方法:
l Element getRootElement():獲取根元素;
l void setRootElement():設置根元素;
l String getXmlEncoding():獲取XML文檔的編碼;
l void setXmlEncoding():設置XML文檔的編碼;
Element方法:
l void add(Attribute attr):添加屬性節點;
l void add(CDATA cdata):添加CDATA段節點;
l void add(Text Text):添加Text節點;
l Element addAttribute(String name, String value):添加屬性,返回值爲當前元素自己;
l Element addCDATA(String cdata):添加CDATA段節點;
l Element addComment(String comment):添加屬性節點;
l Element addText(String text):添加Text節點;
l void appendAttributes(Element e):把參數元素e的全部屬性添加到當前元素中;
l Attribute attribute(int index):獲取指定下標位置上的屬性對象;
l Attribute attribute(String name):經過指定屬性名稱獲取屬性對象;
l int attributeCount():獲取屬性個數;
l Iterator attributeIterator():獲取當前元素屬性集合的迭代器;
l List attributes():獲取當前元素的屬性集合;
l String attributeValue(String name):獲取當前元素指定名稱的屬性值;
l Element createCopy():clone當前元素對象,但不會copy父元素。也就是說新元素沒有父元素,但有子元素;
l Element element(String name):獲取當前元素第一個名稱爲name的子元素;
l Iterator elementIterator():獲取當前元素的子元素集合的迭代器;
l Iterator elementIterator(String name):獲取當前元素中指定名稱的子元素集合的迭代器;
l List elements():獲取當前元素子元素集合;
l List elements(String name):獲取當前元素指定名稱的子元素集合;
l String elementText(String name):獲取當前元素指定名稱的第一個元素文件內容;
l String elementTextTrime(String name):同上,只是去除了無用空白;
l boolean isTextOnly():當前元素是否爲純文本內容元素;
l boolean remove(Attribute attr):移除屬性;
l boolean remove(CDATA cdata):移除CDATA;
l boolean remove(Text text):移除Text。
DocumentHelper靜態方法介紹:
l static Document createDocument():建立Dcoument對象;
l static Element createElement(String name):建立指定名稱的元素對象;
l static Attribute createAttrbute(Element owner, String name, String value):建立屬性對象;
l static Text createText(String text):建立屬性對象;
static Document parseText(String text):經過給定的字符串生成Document對象;