可擴展:徹底自定義,按照本身的規則來定義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)==>文檔對象模型
特殊字符的轉換
> >
< <
'' '
" "
& &
(空格)
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());
}