Java XML

可擴展:徹底自定義,按照本身的規則來定義css

標記:能讓計算機認識的信息符號html

  書本教材的編號======>證實書是你的java

  身份證號碼惟一的======>證實本身的身份數據庫

XML:dom

1.可擴展標記語言性能

2.符號w3c標準編碼

3.着重數據的保存,不着重數據的顯示spa

4.無需預編譯功能orm

W3C:國際組織,萬維網聯盟組織,規定了xml,html,css,js,數據庫...一系列的規範xml

以xml文件做爲後綴名的文件,咱們稱之爲xml文件

注意點:

1.根節點:在當前文件中只能有一個

2.全部的節點都是成對出現的

<學校>開放標籤

</學校>閉合標籤

3.全部的節點必須是正確的嵌套

4.xml文件中,嚴格區分大小寫

 

xml的節點結構,咱們稱之爲DOM樹===>整個xml節點結構像一個倒掛的樹

DOM:(Document Object Model)==>文檔對象模型

 

特殊字符的轉換

>   &gt;

<         &lt;

''        &apos;

"         &quot;

&         &amp

(空格)   &nbsp;

DTD文件(Document Type ):針對於xml文件的約束文件

<!ELEMENT package (result-types?, interceptors+, default-interceptor-ref*)>

ELEMENT:元素package

()裏面的內容,稱之爲子元素

,:括號裏元素的先後位置

?:子元素最多出現一次

+:子元素至少出現一次

*:子元素至少出現0次,最多出現N次

<!ATTLIST package
name CDATA #REQUIRED
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
strict-method-invocation CDATA #IMPLIED
externalReferenceResolver NMTOKEN #IMPLIED
>

ATTLIST:package元素中能夠包含的屬性

name,extends屬性名

CDATA:Character  Data字符數據==>解析器不會解析的文本

PCDATA:Parsed  Character  Data被解析的字符數據====>解析器會解析的文本

#REQUIRED:屬性是必須

#IMPLIED:屬性不是必須

Schema  能夠替換DTD,文件的擴展名是xsd(xml Schema Definition)

解析xml文件

1.DOM:基於xml文檔樹的解析,把文件中的內容所有讀到內存中,佔內存,消耗資源多

2.SAX:基於事件的解析,不會把文件中的所有內容讀到內存中,佔用資源少

3.JDOM:針對於java的特定模型!知足2 8原則!自身沒有解析器,依賴於SAX2的解析器

4.DOM4j:是JDOM的一個分支,開放源碼.性能優異,功能強大,依賴於SAX解析器

解析xml文件的思路:

1.把xml文件理解成一個DOM樹

2.找到DOM樹的根節點

3.而後根據需求去遍歷

4.找到本身想要的節點

任務:

實現對xml文件中節點(元素)的增刪查改

獲取dom樹:

SAXReader reader=new SAXReader();//建立解析器對象

Document document = reader.read(file);//獲取dom樹

Element root= document.getRootElement();//獲取根節點

把內存中的數據保存在xml文件中,持久化數據:

//建立輸出流格式化對象

OutputFormat format=OutputFormat.createPrettyPrint();

format.setEncoding("設置編碼格式");

XMLWriter writer=new XMLWriter(new FileWriter(file), format);

新增節點:

Element classElement = root.addElement("class");//在根節點下建立一個新的節點class

classElement.addAttribute("name", "四班");//給class節點新增屬性,

                                                       name:屬性名,四班:屬性值

Element studentElement = classElement.addElement("student");//再次增長子節點                                                                                      student

studentElement.addAttribute("name", "啦啦4");// 給student節點新增屬性

studentElement.addText("有點浪");//新增文本節點

刪除節點:

Iterator<Element> classes = root.elementIterator();//從根節點中獲取全部的子節點

while(classes.hasNext()){

Element clazz = classes.next();//獲取具體的一個子元素

if(clazz.attributeValue("name").equals(className)){

//刪除節點,不容許自殺,必須經過父節點刪除
classes.remove();

}

}

 

修改節點:

clazz.setAttributeValue("location", newClassName);//屬性爲location的值修改成新的                                                                   值

查詢節點:

System.out.println("班級名稱:"+clazz.attributeValue("name"));

//若是結點中有文本節點

if(!student.getTextTrim().equals("")){

System.out.println("這個學生的描述信息是:"+student.getTextTrim());

}

相關文章
相關標籤/搜索