XML:可擴展標記語言!javascript
01.很象htmlcss
02.着重點是數據的保存html
03.無需預編譯java
04.符合W3C標準瀏覽器
可擴展:咱們能夠自定義,徹底按照本身的規則來!tomcat
標記: 計算機所能認識的信息符號!dom
int num=5; 教材編號maven
01.文檔聲明 <?xml version="1.0" encoding="UTF-8"?>ide
02.元素 <p></p>工具
03.屬性 <p id="haha"></p>
04.註釋 <!-- -->
05.特殊字符
06.CDATA區域 Character data 字符數據
07.處理指令 引入css樣式
<phone> <brand name="小米"> <edition name="1.0"> <hehe>hehe</hehe> <hehe>爲發騷而生</hehe> </edition> <edition name="2.0"/> </brand> <brand name="華爲"> <edition name="1.0"/> <edition name="2.0"/> </brand> <brand name="蘋果"> <edition name="1.0"/> <edition name="2.0"/> </brand> </phone>
01.xml文件中只能有一個根節點
02.節點要成對出現 有開發和閉合
03.節點必須正確的嵌套
04.嚴格區分大小寫
05.空格和換行都是特殊字符 會被解析器解析
xml,html都是一個相似於倒掛的樹!
只有一個根節點,枝葉茂盛!
咱們把這個倒掛的樹稱之爲===》dom樹!
DOM:(Doucument Object Model)文檔對象模型!
> > < < & & ' ' " "
XML解析器不會處理,而是當成字符串原樣輸出!
語法:
<![CDATA[xml內容]]>
1.new project===>maven==>quick==>archetypeCatalog=internal
2.引入須要的pom節點
3.自定義一個xml文件 (學校 年級 班級)
4.需求經過dom4j實現查詢學校下面的年級以及班級信息
5.建立一個測試類 書寫代碼
具體操做請看:
http://www.javashuo.com/article/p-exzesvcd-n.html
01.DOM:基於xml文檔樹結構的解析,把xml文件中的內容都讀取到內存中,
比較佔內存,消耗資源多!
02.SAX:基於事件的解析。消耗資源小!
03.JDOM:針對於java的特定模型!知足2 8原則!自身沒有解析器,依賴於SAX2!
04.DOM4J:for(4)JDOM的一個分支!源碼開放,性能優異,功能強大!
1. 導入dom4j jar包
解析代碼:
package com.metro.util; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.Scanner; /** * @author 房上的貓 * @create 2018-06-28 11:42 * @博客地址: https://www.cnblogs.com/lsy131479/ * <p> * 測試 **/ public class Test { static Scanner input = new Scanner(System.in); static Document doc = null; static Element root = null; //常量路徑 static final String URL = "src/main/resources/phone.xml"; //主程序 public static void main(String[] args) { System.out.println("***1.查詢全部"); System.out.println("***2.修改"); System.out.println("***3.刪除"); System.out.println("***4.添加"); System.out.print("*************請選擇:"); int choose = input.nextInt(); getDocument(); System.out.println("==============start=============="); switch (choose) { case 1: Iterator<Element> brands = root.elementIterator(); findAll(brands, 0); break; case 2: up(); break; case 3: del(); break; case 4: add(); break; } System.out.println("==============exit=============="); } //添加 private static void add() { Element brand = root.addElement("brand"); brand.addAttribute("name", "hehe"); Element edition = brand.addElement("edition"); edition.addAttribute("name", "xx"); edition.addText("ssss"); saveXML(); } //刪除 private static void del() { Iterator<Element> brand = root.elementIterator(); while (brand.hasNext()) { Element next = brand.next(); // System.out.println(next.attributeValue("name")); if (next.attributeValue("name").equals("haha")) { root.remove(next); } } saveXML(); } //修改 private static void up() { Iterator<Element> brand = root.elementIterator(); while (brand.hasNext()) { Element next = brand.next(); // System.out.println(next.attributeValue("name")); if (next.attributeValue("name").equals("hehe")) { next.setAttributeValue("name", "haha"); } } saveXML(); } //保存xml private static void saveXML() { XMLWriter writer = null; OutputFormat format = null; try { format = OutputFormat.createPrettyPrint(); writer = new XMLWriter(new FileWriter(URL), format); writer.write(doc); } catch (IOException e) { e.printStackTrace(); } finally { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } //查詢全部 private static void findAll(Iterator<Element> brands, int count) { String t = ""; //設置縮進 for (int i = 0; i < count; i++) { t += "\t"; } while (brands.hasNext()) { Element brand = brands.next(); System.out.println(t + "name:" + (brand.attributeValue("name") == null ? "" : brand.attributeValue("name"))); System.out.println(t + "text:" + brand.getTextTrim()); //預先構建子節點迭代器 Iterator<Element> iterator = brand.elementIterator(); //遞歸 findAll(iterator, ++count); } } //初始化 public static void getDocument() { SAXReader reader = new SAXReader(); try { doc = reader.read(URL); root = doc.getRootElement(); } catch (DocumentException e) { e.printStackTrace(); } } }
Document Type Definition(文檔類型定義)
01.規範咱們的編碼
02.在瀏覽器中正常的顯示
<!ELEMENT school (grade+),(class|student)>
ELEMENT :元素,關鍵字
school:元素名稱
grade:子元素或者元素類型 CDATA PCDATA (Parse)解析數據,不能包含子元素
():用來給元素分組
| :二者必須選擇一個
+ : 1-N,至少出現一次
* : 0-N,無關緊要,而且能夠屢次
?: 0|1,最多一次
,:元素出現的順序
<!DOCTYPE 根元素[定義的內容]>
<!DOCTYPE 根元素 SYSTEM "dtd文件位置">
<!DOCTYPE 根元素 SYSTEM "dtd文件位置"[定義的內容]>
xml文件擡頭:
<!DOCTYPE phone SYSTEM "phone.dtd">
phone.dtd 約束文件:
<!ELEMENT phone (brand*)> <!ELEMENT brand (edition*) > <!ATTLIST brand name CDATA "XX"> <!ELEMENT edition (hehe*) > <!ATTLIST edition name CDATA "XX"> <!ELEMENT hehe (#PCDATA) > <!ATTLIST hehe name CDATA "XX"> <!-- #PCDATA:被解析的字符數據 CDATA:默認值 *:出現0或屢次 +:出現最少一次 -->
my.html 測試文件:
僅兼容低版本IE
<html> <head> <!--本身編寫一個簡單的解析工具,去解析XML DTD是否配套--> <script language="javascript"> // 建立xml文檔解析器對象 var xmldoc =new ActiveXObject("Microsoft.XMLDOM"); // 開啓xml校驗 xmldoc.validateOnParse = "true"; // 裝載xml文檔,即指定校驗哪一個XML文件 xmldoc.load("phone.xml"); document.writeln("錯誤信息:"+xmldoc.parseError.reason+"<br>"); document.writeln("錯誤行號:"+xmldoc.parseError.line); </script> </head> <body> </body> </html>
總結:
1.xml html
2.特色,注意事項
3.maven項目建立的注意點
4.手寫xml
5.解析xml的幾種方式
6.dom4j解析的步驟