1.xml(可擴展標記語言)的概述 與html的區別: xml: 描述數據,用於存儲和傳輸數據。標簽都是自定義的 html:顯示數據,標簽都是預定義的 注意事項: 文檔聲明必須在第一行 只有一個根標簽 元素只能包裹嵌套,不能交叉嵌套 注釋不能嵌套 標簽命名規則:字母、數字、下划線、減號、英文句點組成,嚴格區分大小寫 屬性值要用單引號或雙引號 2.約束文檔 1.DTD(Document tyte definition)--->約束xml的書寫規范 a DTD文件的書寫 <?xml version="1.0" encoding="UTF-8"?> //文檔聲明 <!ELEMENT 書架 (書+)> <!ELEMENT 書(書名,作者,售價)> <!ELEMENT 書名(#PCDATA)> <!ELEMENT 作者(#PCDATA)> <!ELEMENT 售價(#PCDATA)> b DTD文件的引入 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 書架 SYSTEM "book.dtd"> //可以在xml文件創建時自動生成 <書架> <書> <書名></書名> <作者></作者> <售價></售價> </書> </書架> 2.Schema的概述:--->符合xml語法,拓展名.xsd 對比 Schema 和 DTD a.XML Schema符合XML語法結構。 b.DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。 c.XML Schema對名稱空間支持得非常好。 d.XML Schema比XML DTD支持更多的數據類型,並支持用戶自定義新的數據類型。 e.XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。 約束文檔: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' //標准名稱空間 xmlns意思為xml名稱空間 targetNamespace='http://www.itheima.com'> //自定義名稱空間 <xs:element name='書架'> //約束根標簽 <xs:complexType> //表示根標簽為復雜類型,可以有子標簽 <xs:sequence maxOccurs='unbounded'> //表示子元素有順序 屬性為unbounded表示子標簽的數量不限 <xs:element name='書'> <xs:complexType> <xs:sequence> <xs:element name='書名' type='xs:string' /> <xs:element name='作者' type='xs:string' /> <xs:element name='售價' type='xs:string' /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 引入約束文檔: <?xml version="1.0" encoding="UTF-8"?> <itheima:書架 xmlns:itheima="http://www.itheima.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itheima.com book.xsd"> <書> <書名>書名</書名> <作者>作者</作者> <售價>售價</售價> </書> </itheima:書架> 3.XML的解析 解析的含義: 采用Java代碼操作(增,刪,改,查)我們的XML文件里面的內容. 常見的解析方式: DOM:把所有的節點數據,全部加載到內存當中.解析方便,容易出現內存溢出 SAX:逐個節點進行解析,不會出現內存溢出,解析較為繁瑣. 提供的解析操作: JAXP:sun公司提供 DOM4j:開源框架,需要導入jar包 4.Dom4j常用的方法: a需要導入jar包 b創建對應的document對象----> dom4j-1.6.1---docs---index.html---quick start---Creating a new XML document SAXReader reader = new SAXReader(); //獲取解析器對象 Document document = reader.read(url); //通過解析器獲取文件對象,參數url為xml的文件路徑的字符串 重要方法:Element getRootElement() //通過文件對象,獲取根標簽對象 Element 創建元素對象的方式: DocumentHelper.CreatElement(String name); //創建一個新的元素對象,參數為要創建的對象的名稱 常用方法 獲取方法: 獲取文本/屬性: String attributeValue(String name): //根據指定的屬性名稱獲取其對應的值 String getText() : //獲取當前元素對象的文本 String elementText(String name) //獲取名稱為name的子元素中的文本 獲取子元素對象: Element element(String name): //獲取元素名稱為name的子元素對象,如果有重復,返回第一個 List elements() : //獲取所有的子元素 List elements(String name): //獲取元素名稱為name的所有子元素集合 獲取父元素對象 Element getParent(); 添加元素 add(Element e) //添加子元素 修改文本、屬性: void setText(String text): //設置當前元素對象的文本 Element addAttribute(String name,String value): //根據指定的屬性名稱和值進行添加或者修改 參數為屬性名和屬性值 刪除方法: remove(Element e); //刪除子元素,參數為元素對象 將文件寫入XML文件中 //獲取格式化對象 OutputFormat format=OutputFormat.createCompactFormat(); //獲取字節流 FileOutputStream fos=new FileOutputStream(path); //獲取寫xml對象 XMLWriter xw=new XMLWriter(fos,format); //寫文件 xw.write(d); //參數為文件對象