1.什麼是XMLhtml
xml即 Extensible Markup Language,中文叫可擴展標記語言,是一種具備結構性的標記語言。架構
2.Xml文檔的構成ide
XML文檔即用xml語言編寫的文檔,它包括如下幾部分:ui
2.1XML元素spa
XML元素由一個開始標記和一個結束標記,以及開始和結束標記之間的數據組成,如.net
<book>馬克思主義</book>
注意:code
1)XML是區分大小寫的,好比<book> 和<BOOK>是兩個不一樣的元素;orm
2)XML元素之間不容許重疊,即必須在父元素內關閉全部子元素,以下是錯誤的;xml
<book> <title>馬克思主義 <author>馬克思 </title></author> <book>
正確的XMLhtm
<book> <title>馬克思主義</title> <author>馬克思</author> <book>
3)全部元素都必須關閉,空元素<book></book>可使用簡短語法在開始標籤關閉,如<book/>
4)XML文檔只能有一個根元素,好比下面是錯的
<? verson="1.0" ?> <book>馬克思主義</book> <book>列寧主義</book>
5)元素和節點的區別:XML文檔是由各個節點組成的,XML節點包括XML元素,XML聲明,XML元素內的文本和特性等等。
2.2 特性
特性即元素的屬性,好比
<book title='馬克思主義'></book>
特性也是存儲數據的一種方式,和在元素體內存儲數據不一樣的是,在元素體內存儲數據更易於閱讀,而在特性中存儲數據文檔的大小會更小,由於使用特性減小了元素的換行和縮進。
2.3XML聲明
xml聲明用來聲明文件的版本,使用的字符集和XML文檔是否依賴其餘文件,好比
<?xml verson ="1.0" encoding="utf-8" standalone="yes"?>
verson用於聲明XML的版本,有1.0和1.1兩個版本,xml維護組織建議使用1.0,.net只支持1.0版本;
encoding表示文檔使用的字符集,standalone表示XML文檔是否依賴其餘文件,有yes、no兩個值。
2.4 XML名稱空間
在 XML 中,元素名稱是由開發者定義的,當兩個不一樣的文檔使用相同的元素名時,就會發生命名衝突。
這個 XML 文檔攜帶着某個表格中的信息:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
<table></table>
這個 XML 文檔攜帶有關桌子的信息(一件傢俱):
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
<table></table>
假如這兩個 XML 文檔被一塊兒使用,因爲兩個文檔都包含帶有不一樣內容和定義的 <table> 元素,就會發生命名衝突。
XML 解析器沒法肯定如何處理這類衝突。
參考http://www.w3school.com.cn/xml/xml_namespaces.asp
可使用名稱空間解決衝突問題,例如
<table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </table>
名稱空間的定義方式:使用xmls特性:前綴="名稱空間uri",定義了名稱空間後就能夠在其子元素中使用該前綴表示該元素是屬於某個名稱空間的。
也可使用xmls定義默認的命名空間,不使用前綴
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
3.4XML應遵循的原則
1)有且只有一個根元素;
2)每個元素都要進行關閉;
3)沒有重疊的元素,全部的元素都要在父元素內關閉;
4)全部特性都要放在引號內
3.5使用XSD驗證XML文檔
3.5.1使用VS建立XSD
在VS項目中添加並編寫好XML文檔後可讓VS建立對應的XSD文檔,以下圖打開XML文件,在VS菜單上找到建立XSD菜單建立架構
建立好XSD後能夠發現再次編輯對應的XML文件有提示了,由於VS自動把當前文件連接到剛剛建立的架構。
能夠爲一個XML文件連接幾個架構,方法是打開XML文件->鼠標右鍵屬性->架構,而後在下圖中添加或者選中使用的架構
3.5.2 代碼驗證XML文件是否符合架構
<?xml version="1.0" encoding="utf-8" ?> <stories> <story ac="98"> <title>A House in Aungier Street</title> <author> <name>Sheridan le Fanu</name> <nationality>Irish</nationality> </author> <rating>eerie</rating> </story> <story ac ="97"> <title>The Signalman</title> <author> <name>Charles Dickens</name> <nationality>English</nationality> </author> <rating>atmospheric</rating> </story> </stories>
public static string XmlValidationByXsd(string xmlFile, string xsdFile, string namespaceUrl = null) { StringBuilder sb = new StringBuilder(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(namespaceUrl, xsdFile); settings.ValidationEventHandler += (x, y) => { sb.AppendFormat("{0}|", y.Message); }; using (XmlReader reader = XmlReader.Create(xmlFile, settings)) { try { while (reader.Read()) ; } catch (XmlException ex) { sb.AppendFormat("{0}|", ex.Message); } } return sb.ToString(); }
string validMsg = XMLValidationByXsd(@"D:\文檔\VS2010項目\XMLTest\XMLTest\XMLFile1.xml", @"D:\文檔\VS2010項目\XMLTest\XMLTest\XMLFile1.xsd");
使用時把路徑替換成本身的路徑
參考https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html