1.XmlSchema
有兩種方式:
1.在Dom模型中執行驗證
//XmlDocument doc = new XmlDocument();
//載入文法
//doc.Schemas.Add("www.ljzforever.com", "xsd.xsd");
//載入文檔
//doc.Load("xml.xml");
//進行驗證,並指定驗證時出錯了後觸發的方法
//doc.Validate(ValidateHandler);
2.用參數對象執行驗證
XmlReaderSettings set = new XmlReaderSettings();
//載入文法
set.Schemas.Add("www.ljzforever.com", "xsd.xsd");
//驗證類型
set.ValidationType = ValidationType.Schema;
//指定驗證時出錯了後觸發的方法
set.ValidationEventHandler += ValidateHandler;
//將參數對象載入進閱讀器
XmlReader read = XmlReader.Create("xml.xml", set);
//在載入文檔的過程中進行驗證
while (read.Read()){}
//上面一句或者用:
//XmlDocument doc = new XmlDocument();
//doc.Load(read);
///驗證時出錯了後觸發的方法
static void ValidateHandler(object sender, ValidationEventArgs e)
{
Console.WriteLine(e.Message);
}
2.xslt
//載入
XslCompiledTransform tran = new XslCompiledTransform();
tran.Load("xsl.xsl");
//準備流
MemoryStream ms = new MemoryStream();
XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);
//準備參數
XsltArgumentList list = new XsltArgumentList();
list.AddParam("level", "", 3);
//將結果轉入流
tran.Transform("xml.xml",list, xtw);
//將流轉入字串
byte[] buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, (int)ms.Length);
Console.WriteLine(System.Text.Encoding.UTF8.GetString(buffer));
Console.ReadKey();
上面只是通常情況,如果需要將節點以參數的形式傳入xslt的話,就需要引入新的對象了
//用XPathDocument載入文檔
XPathDocument path = new XPathDocument("xml.xml");
//建立導航
XPathNavigator nav = path.CreateNavigator();
//在導航內選擇結點集,是xpath文法
XPathNodeIterator iter = nav.Select("//emp");
//將結點集匯入參數值
list.AddParam("level", "", iter);
3.關於XmlDataDocument對象
通過XmlDataDocument對象,我們可以與DataSet建立關係,但是在我研究中發現,實際上在這兩個對象之間DataSet才是主類,XmlDataDocument主要是起來一個配合作用。(哈哈,個人意件),因為無論任何時候,都要求DataSet載入Schema(架構),不然就不可用啊!
有三種方式建立兩者的關係
a.先建立DataSet,並載入xml文檔,然後在XmlDataDocument的建構函式中建立關係:
DataSet ds = new DataSet()
ds.ReadXml("xml.xml");
XmlDataDocument doc = new XmlDataDocument (ds)
b.先建立DataSet,並載入xml架構,然後在XmlDataDocument的建構函式中建立關係,最後在XmlDataDocument中載入文檔:
DataSet ds = new DataSet()
ds.ReadXmlSchema("xsd.xsd");
XmlDataDocument doc = new XmlDataDocument (ds)
doc .Load("xml.xml");
c.先建立XmlDataDocument,然後建立DataSet,並將XmlDataDocument的DataSet屬性賦給它,然後DataSet載入架構,最後XmlDataDocument載入文檔
XmlDataDocument doc = new XmlDataDocument (ds)
DataSet ds = data.DataSet;
ds.ReadXmlSchema("ds.xsd");
data.Load("xml.xml");
總之,不管怎樣建立,DataSet都要求有架構,且不能晚於文檔載入,必須同時載入或先載入!
通過引入XmlDataDocument,使DataSet中的資料既可以用ado.net的方式操作,又可以用xml的Dom模型或流模型操作,增強了操作的靈活性。
注意:
1.推存使用第三種構造方式,因為這樣可以必免 XML 文檔的失真。如果 DataSet 是使用 ReadXml 從 XML 檔案中填充的,那麼當使用 WriteXml 以 XML 文檔形式寫回資料時,資料可能大大不同於初始的 XML 文檔。這是因為 DataSet 不維護 XML 文檔中的格式設定(如空白)或分層資訊(如元素順序)。DataSet 也不包含 XML 文檔中因為不匹配 Dataset 架構而被忽略的元素。通過使 XmlDataDocument 與 DataSet 同步,可以在 XmlDataDocument 中維護初始 XML 文檔的格式設定和分層元素結構,而 DataSet 僅包含適用於 DataSet 的資料和架構資訊。
2.DataSet都要求有架構,且不能晚於文檔載入,必須同時載入或先載入!上面己說明的很詳細了
3.所有使用XmlDocument的地方都可以使用XmlDataDocument ,因為XmlDataDocument 是對XmlDocument的擴充
參考的文章:
XmlDataDocument 與Dataset
http://software.it168.com/manual/asp.net/4-4-6.htm
使 DataSet 與 XmlDataDocument 同步的樣本(節點和欄位對應的編程)
http://www.cnblogs.com/cuihongyu3503319/archive/2007/01/07/614072.html
高手進來談一下XmlDataDocument類和DataSet類的區別看看
http://topic.csdn.net/t/20040920/02/3389023.html
XmlDocument 與 XmlDataDocument 的區別
http://www.cftea.com/c/2008/07/Q1DY3YTFNQ8V95LB.asp
XmlDataDocument 問題
http://topic.csdn.net/t/20050603/07/4055616.html
解析.Net架構下的XML編程技術
http://blog.csdn.net/qdzx2008/archive/2006/04/17/666566.aspx
請教XmlDataDocument的問題
http://topic.csdn.net/t/20050420/14/3952062.html