![](http://static.javashuo.com/static/loading.gif)
XML
SGML : 標準通用置標語言 Standard Generailzed Markup Language
XML
HTML : 超文本置標語言 HyperText Markup Language
XML : 可擴展標記語言
標記 : 指計算機所能理解的信息符號
XML 的優勢 :
① 可擴展的標記
② 數據共享和重用
③ XML 遵循嚴格的語法要求
④ XML 便於不一樣系統之間信息的傳輸
⑤ 數據存儲格式不受顯示格式的制約
⑥ 包含語義的文檔格式
⑦ 對面向對象(OOP)的支持 DOM
⑧ 內容與形式的分離
⑨ 具備較好的保值性
缺點:
① 語義表達能力上略顯不足
② XML 的有些技術還沒有造成統一的標準
③ 應用程序\瀏覽器對XML 的支持也是有限的
基本格式 :<標記名></標記名>
字符: > ---> > < ---> < & ---> &
" ---> " , ---> ' 空格 --->
XML 和 HTML 的主要區別:
XML 是被設計用來描述數據的,重點是:什麼是數據,如何存放數據
HTML 是被設計用來顯示數據的,重點是:顯示數據以及如何更好地顯示數據
XML 聲明:
<?xml version = "XML的版本號" encoding = "採用的編碼標準" standalone = "no"?>
處理指令:
<?處理指令名 處理指令信息>
DOM解析
DOM:是將xml文件所有載入,組裝成一顆dom樹,而後經過節點以及節點之間的關係來解析xml文件
或 將xml以樹結構的方式一次性加載進內存,易用,修改方便,可是更佔內存。不適應於大文件,通常狀況下用它便可應付大多數應用。
DOM 是用與平臺和語言無關的方式表示 XML 文檔的官方 W3C 標準。DOM 是以層次結構組織的節點或信息片段的集合
DOM 解析器須要將整個文檔解析一遍,並將解析結果以樹型結構保存到內存中( 這棵樹被稱爲DOM 樹),而後才把程序
的控制權交給用戶。這致使了DOM 方式不夠靈活,須要佔用大量的資源。
DOM xml文件的建立:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//獲取 DocumentBuilderFactory 的新實例。
DocumentBuilder db = dbf.newDocumentBuilder();//使用當前配置的參數建立一個新的 DocumentBuilder 實例。
Document doc = db.newDocument();//獲取 DOM Document 對象的一個新實例來生成一個 DOM 樹。
Element root = doc.createElement("root"); //建立根結點
document.appendChild(root); //追加嵌套 setTextContent()、setAttribute() 加值
TransformerFactory tf = TransformerFactory.newInstance();// 獲取 TransformerFactory 的新實例。
Transformer t = tf.newTransformer();//此抽象類的實例可以將源樹轉換爲結果樹。
t.transform(new DOMSource(root), new StreamResult("xml文件路徑"));
DOM xml文件的讀取:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("xml文件路徑");
NodeList array = document.getChildNodes();
for (int i=0;i<array.getLength();i++) {
Node cla = array.item(i);
NodeList stus = cla.getChildNodes();
for (int j=0;j<stus.getLength();j++) {
Node stu = stus.item(j);
NamedNodeMap arrs = stu.getAttributes();
if (stu.getNodeName().equals("student")) { //過濾掉#test
for(int k = 0;k<arrs.getLength();k++){
Node arr = arrs.item(k);
System.out.println(arr.getNodeName()+" "+arr.getNodeValue());
}
}
}
}
Dom4j 解析
查詢:
SAXReader sr = new SAXReader();
Document doc = sr.read("xml文件路徑");
List<DefaultElement> list = doc.selectNodes("節點/子節點");
增長:
SAXReader sr = new SAXReader();
Document doc = sr.read("xml文件路徑);
List<DefaultElement> list = doc.selectNodes("節點");
DefaultElement de = list.get(0);
Element ele = de.addElement("要增長的節點");
ele.addAttribute("要增長的屬性名","要增長的值");
ele.addText("增長文本值");
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));
write.write(doc); write.close();
修改:
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read("xml文件路徑");
List<DefaultElement> list = doc.selectNodes("節點");
DefaultElement de = list.get(0);
List<Element> list2 = de.elements();
for (Element e : list2) {
if (e.attributeValue("屬性名").equals("屬性值")) {
Element eleName = e.element("屬性名");
eleName.setText("新值");
}
}
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));
write.write(doc); write.close();
刪除:
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read("xml文件路徑");
List<DefaultElement> list = doc.selectNodes("節點");
DefaultElement de = list.get(0);
List<Element> list2 = de.elements();
for (Element e : list2) {
if (e.attributeValue("屬性名").equals("屬性值")) {
de.remove(e);
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));
write.write(doc); write.close();
將文檔寫入XML文件:
① 文檔中全英文,不設置編碼,直接寫入
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));
write.write(document); write.close();
② 文檔中含有中文,設置編碼格式再寫入
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("指定編碼格式");
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));
write.write(document); write.close();
建立XML文件 :
String fileName = "路徑";
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("根節點");
XMLWriter writer = new XMLWriter(new File(fileName));
writer.write(doc);
writer.close();
將字符串轉化爲 XML 文件 :
String text = "<cla><stu> 屬性 </stu></cla>";
Document doc = DocumentHelper.parseText(text);