使用XML空間讀取XML文件
(1)DocumentSource和TransformSource屬性
Document:該屬性表示使用XmlDocument對象來設置XML文檔。
DocumentContent:使用字符串來設置XML文檔,該屬性通常是以聲明方式設置,具體方法是在XML控件的<asp:Xml>標記的開始和結束之間放置文本。
DocumentSource:該屬性使用文件來設置XML文檔。
Transform:使用指定的XslTransform類對象格式化XML文檔。
TransformSource:使用指定的XSL轉換文件格式化XML文檔。
XmlDocument xd = new XmlDocument();//創建XmlDocument對象
xd.Load(Server.MapPath("XMLFile.xml"));加載指定的XML數據
在ASP.NET中,XmlDocument類實現W3C文檔對象模型(DOM),該類的常用方法如下:
AppendChild():將指定的節點添加到該節點的子節點列表的末尾。
Clone():創建此節點的一個副本。
CreateAttribute():創建具有指定名稱的XmlAttribute對象。
CreateComment():創建包含指定數據的XmlComment對象。
CreateDocumentType():返回新的XmlDocumentType對象。
CreateElement():創建元素。
CreateNode():創建指定類型的節點,如創建文檔聲明等。
CreateTextNode():創建具有指定文本的XmlText。
Equals():確定兩個Object實例是否相等。
Save():將XML文檔保存到指定的位置。
Load():加載指定的XML數據
使用XmlDocument類解析XML文檔
使用該類對文檔進行解析,一般步驟如下:
1)通過XML文檔創建DOM樹。
2)遍歷元素(根元素的下級節點),獲取該元素的屬性、字符數據和所有子節點等。
3)遍歷子節點,獲取元素的屬性和字符數據,如果該節點還有子節點,獲取所有子節點,然後重複第三步,直到遍歷完該文檔的所有節點爲止。
//遍歷節點元素
XmlNodeList list=doc.GetElementsByTagName("friend");
for(int i=0;i<list.Count;i++)
{
XmlNode node=list.Item(i);
//獲取friend元素的屬性
XmlNode attr=node.Attributes.Item(0);
str+=attr.Name+"="+attr.FirstChild.InnerText+"</br>";
//遍歷friend元素的子元素
XmlNodeList l=node.ChildNodes;
for(int j=0;j<l.Count;j++)
{
XmlNode n=l.Item(j);
//獲取元素標記和字符數據
str+=n.Name+":"+n.FirstChild.InnerText+"</br>";
}
str+="</p>";
}
Label1.Text=str;
使用XmlDocument類創建XML文檔
1)使用LoadXml(string xml)方法和Save(string fileName)方法,即將文檔中的內容以字符串的形式作爲LoadXml(string xml)方法的參數,從該字符串加載到XML文檔,然後調用該類的Save(string fileName)方法將其保存到文件中
2)按照XML的結構一步一步的構建XML文檔。首先創建一個空的XML文檔,即創建該類的對象;然後在該XML的文檔的最頭部加入XML的聲明段落,通過該類中的CreateNode()方法創建;最後是爲XML文檔加入元素和屬性等。
XmlDocument doc = new XmlDocument();
//加入XML的聲明
XmlNode declare = doc.CreateNode(XmlNodeType.XmlDeclaration,"","");
doc.AppendChild(declare);
//加入一個根元素catalog
XmlElement root=doc.CreateElement("","catalog","");
doc.AppendChild(root);
//加入cd元素
XmlElement elem1=doc.CreateElement("vcd");
root.AppendChild(elem1);
//加入name元素,值爲Maggie May
XmlElement node1=doc.CreateElement("name");
XmlText name=doc.CreateTextNode("Maggie May");
node1.AppendChild(name);
elem1.AppendChild(node1);
//加入artist,值爲Rod Stewart
XmlElement node2=doc.CreateElement("artist");
XmlText artist=doc.CreateTextNode("Rod Stewart");
node2.AppendChild(artist);
elem1.AppendChild(node2);
//加入company元素,值爲Pickwick
XmlElement node3=doc.CreateElement("company");
XmlText company=doc.CreateTextNode("Pickwick");
node3.AppendChild(company);
elem1.AppendChild(node3);
//保存
doc.Save("d:\\vcd.xml");
//重新打開
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("d:\\vcd.xml");
XmlTextReader類讀取XML文檔
XmlTextReader tr = new XmlTextReader(Server.MapPath("XMLFile.xml"));
while (tr.Read())
{
switch (tr.NodeType)
{
//文檔聲明
case XmlNodeType.XmlDeclaration:
Response.Write(Server.HtmlEncode("<?" + tr.Name + tr.Value + "?>") + "</br>");
break;
//DOCTYPE
case XmlNodeType.DocumentType:
Response.Write(Server.HtmlEncode("<!DOCTYPE" + tr.Name + "[" + tr.Value + "]") + "</br>");
break;
//元素開始
case XmlNodeType.Element:
Response.Write(Server.HtmlEncode("<" + tr.Name + ">") );
break;
//字符數據
case XmlNodeType.Text:
Response.Write(tr.Value );
break;
//元素結束
case XmlNodeType.EndElement:
Response.Write(Server.HtmlEncode("</" + tr.Name + ">") + "</br>");
break;
//解釋
case XmlNodeType.Comment:
Response.Write(Server.HtmlEncode("<!--" + tr.Value + "--!>") + "</br>");
break;
case XmlNodeType.Attribute:
Response.Write(Server.HtmlEncode(tr.Name + "=" + tr.Value));
break;
}
XmlTextWriter類創建XML文檔
XmlTextWriter writer = new
XmlTextWriter(Server.MapPath("~") + "\\2.xml", System.Text.Encoding.UTF8);
//文檔開始
writer.WriteStartDocument();
//根元素
writer.WriteStartElement("users");
//創建元素infor
writer.WriteStartElement("infor" );
//爲元素infor添加屬性
writer.WriteAttributeString("id", "k001" );
writer.WriteElementString("name", "李華");
writer.WriteElementString("age", "25" );
writer.WriteElementString("email", "[email protected]" );
writer.WriteStartElement("Requestinfor" );
writer.WriteAttributeString("time", DateTime.Now.ToString() );
writer.WriteElementString("Type", Request.RequestType );
writer.WriteElementString("IP", Request.UserHostAddress );
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
//文檔結束
writer.WriteEndDocument();
writer.Close();
在ADO.NET組件中DataSet是其核心組件之一,它提供了獨立於數據源的數據訪問功能。爲了實現這種平臺互用性和可伸縮的數據訪問,ADO.NET採用了基於XML的數據傳輸格式,XML在這裏充當了至關重要的角色。DataSet可將數據和架構作爲XML文檔進行讀寫,當數據傳輸時,ADO.NET是將DataSet表述爲XML,然後以XML格式傳遞給其它組件。例如:
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("AddressList.xml"));
dg.DataSource = ds.Tables[0].DefaultView;
dg.DataBind();
另外,DataSet數據集支持的最直接的XML方法就是GetXml() 和GetXmlSchema()了,該方法只將XML數據或XSD架構作爲一個字符串值返回,核心代碼如下所示:
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("Order.xml"));
ds.ReadXmlSchema(Server.MapPath("Order.xsd"));
Response.Write(ds.GetXml());
Response.Write(ds.GetXmlSchema());