遵循原則:元數據(有關數據的數據)應當存儲爲屬性,而數據自己應當存儲爲元素。node
XML與操做系統無關,與編程語言無關,能夠實現不一樣系統之間的數據交換
XML文檔內容由一系列標籤元素組成
<標籤名 屬性名="屬性值"></標籤名>
web<元素名 屬性名="屬性值">元素內容</元素名>
---屬性值中不能直接包含<、「、&(不建議 '、>)數據庫
全部XML元素都必須由結束標籤,大小寫敏感,正確的嵌套
XML 數據以純文本格式進行存儲,所以提供了一種獨立於軟件和硬件的數據存儲方法。
XML 數據以文本格式存儲。這使得 XML 在不損失數據的狀況下,更容易擴展或升級到新的操做系統、新應用程序或新的瀏覽器
若是信息感受起來很像數據,那麼請使用子元素。
避免 XML 屬性?
因使用屬性而引發的一些問題:
屬性沒法包含多重的值(元素能夠)
屬性沒法描述樹結構(元素能夠)
屬性不易擴展(爲將來的變化)
屬性難以閱讀和維護
請儘可能使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。
元數據(有關數據的數據)應當存儲爲屬性,而數據自己應當存儲爲元素。
XML 屬性必須加引號
子元素能夠重名!
經過 DTD 驗證的 XML 是「合法」的 XML。
編程DOM瀏覽器
——文檔對象模型,document object module 9
——節點:XML當中全部的內容均可以稱爲節點node
——元素節點:#element,就是xml當中的標籤 1
——屬性節點:#Attribute,有值的(value) 2
——文本節點:#text,有值的(value)
——註釋節點:
**CDATA正常節點方式讀服務器
應用領域:數據交互、 配置應用程序和網站、 Ajax基石dom
解析技術:
JDK:操做節點方便,讀寫繁瑣
---三方jar包
SAX:操做節點繁瑣,讀寫方便
DOM4J:操做、讀寫方便;性能高!! eclipse非web工程的狀況:
桌面應用swing
第三方應用
一些功能單一的中轉站編程語言
導入dom4j的jar包,生成Referenced Libraries工具
獲取路徑的兩種方式:
//1.從src日後找,若是找不到返回null
pathString1 = ReadDemo.class.getClassLoader().getResource("demo.xml").getPath();//2.從src日後找,若是找不到返回null
String pathString1 = ReadDemo.class.getResource("/demo.xml").getPath();
讀取XML文檔
//開始解析
//1.獲取解析器
SAXReader reader = new SAXReader();
String pathString = ReadDemo.class.getClassLoader()
.getResource("book.xml").getPath();
System.out.println("book.xml path:"+pathString);
//2.獲取文檔
//reader.read(arg0)
Document document = reader.read(new FileInputStream(new File(pathString)));
System.out.print("document type:"+document.getNodeType()+"\t");
System.out.println(document.getNodeTypeName());
//3.獲取根目錄
Element rootEle = document.getRootElement();
System.out.print("rootEle type:"+rootEle.getNodeType()+"\t");
System.out.print(rootEle.getNodeTypeName()+"\t");
System.out.println(rootEle.getName());
//4.獲取子元素
rootEle.element("book");//根據節點名獲取第一個該名稱的節點
rootEle.elements();//獲取全部子標籤
rootEle.elements("book");//全部該名稱的子標籤//獲取屬性值以及子元素內容
List<Element>bookList = rootEle.elements("book");
for (Element book : bookList) {
Attribute attribute = book.attribute("id");
System.out.print("id attributes:"+attribute.getNodeType()+"\t");
System.out.print(attribute.getNodeTypeName()+"\t");
System.out.print(attribute.getName()+"\t");
System.out.println(attribute.getValue());
/*
* 方法2
* String idString = book.attributeValue("id"); System.out.println(idString);
*/
List<Element> bookChildEle = book.elements();
for (Element element : bookChildEle) {
System.out.print("bookChild element:"+element.getName()+"\t");
//System.out.println(element.getText()+"\t");//不去除空格的文本內容,多個空格爲一個
System.out.println(element.getTextTrim());//去除空格的文本內容
}
}//寫文檔
Document document = DocumentHelper.createDocument();
Element books = document.addElement("books");
Element book = books.addElement("book");
Element book1 = books.addElement("book");//簡單添加元素
book.addAttribute("id", "bk001");
book.addCDATA("test word1");
book1.addAttribute("id", "bk002");
book1.addCDATA("test word2");//添加內容
newBookElement.setText("JVM 原理");
//格式化
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//寫入文件
String pathString = ReadDemo.class.getResource("").getPath();
// System.out.println("當前路徑:"+pathString);
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(pathString,"booksWrite.xml")), format);
writer.write(document);
writer.close();
System.out.println("success to write....");【注意:若是是使用eclipse等繼承開發工具查看,注意刷新當前文件夾,才能看到!】
XMLHttpRequest 對象用於在後臺與服務器交換數據。
在 XML 中,省略關閉標籤是非法的。全部元素都必須有關閉標籤。
全部元素都必須彼此正確地嵌套
必須有一個元素是全部其餘元素的父元素
XML 的屬性值須加引號。
【
若是屬性值自己包含雙引號,那麼有必要使用單引號包圍它:
ex:
<gangster name='George "Shotgun" Ziegler'><gangster name="George "Shotgun" Ziegler">】
XML 文檔常常有一個對應的數據庫,其中的字段會對應 XML 文檔中的元素。有一個實用的經驗,即便用數據庫的名稱規則來命名 XML 文檔中的元素。
優點:
1.XML 的優點之一,就是能夠常常在不中斷應用程序的狀況進行擴展。
使用屬性而引發的一些問題:
- 屬性沒法包含多重的值(元素能夠)
- 屬性沒法描述樹結構(元素能夠)
- 屬性不易擴展(爲將來的變化)
- 屬性難以閱讀和維護
請儘可能使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。
從src日後獲取路徑: ClassName.getResource("/file.txt").getPath() ClassName.getClassLoader().getResource("file.txt").getPath()