XML聲明
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<標記 屬性名稱="屬性取值"…>資料內容</標記>
DataSet方法
DataSet.ReadXml(string strFileName);
DataSet.WriteXml(string strFileName);
dbGuest.xsd
dbGuest.xml
<?xml version="1.0" standalone="yes"?>
<dbGuest xmlns="http://tempuri.org/dbGuest.xsd">
<User>
<Name>gloomyboyo</Name>
<City>fuzhou</City>
<Email>gloomyboyo@126.com</Email>
<Message>Hello!</Message>
<STime>2006-8-5 10:51:14</STime>
</User>
</dbGuest>
private void btnSubmit_Click(object sender, System.EventArgs e)
{
DataSet ds = new DataSet("myDs");
//從XML中讀取資料
ds.ReadXml(Server.MapPath(@"./db/dbGuest.xml"));
//以下為添加記錄
DataRow dr = ds.Tables[0].NewRow();
dr["Name"] = tbName.Text.Trim();
dr["City"] = tbCity.Text.Trim();
dr["Email"] = tbEmail.Text.Trim();
dr["Message"] = tbComments.Text.Trim();
dr["STime"] = DateTime.Now.ToString();
ds.Tables[0].Rows.Add(dr);
//寫回XML
ds.WriteXml(Server.MapPath(".//db//dbGuest.xml"));
Response.Redirect("view.aspx");
}
private void Page_Load(object sender, System.EventArgs e)
{//顯示資料
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath(@"./db/dbGuest.xml"));
dgShow.DataSource = ds.Tables[0].DefaultView;
dgShow.DataBind();
}
XMl檔案的讀寫
foreach(XmlNode personElement in root.ChildNodes)
XmlTextWriter的使用
people.xml
<?xml version="1.0" encoding="utf-8" ?>
<PEOPLE>
<PERSON>張三</PERSON>
<PERSON>李四</PERSON>
</PEOPLE>
private void LoadXMLButton_Click(object sender, System.EventArgs e)
{
// 建立XmlDocument類的執行個體
XmlDocument doc = new XmlDocument();
ArrayList NodeValues = new ArrayList();
// 把people.xml檔案讀入記憶體,形成一個DOM結構
doc.Load( Server.MapPath("people.xml") );
XmlNode root = doc.DocumentElement;
foreach( XmlNode personElement in root.ChildNodes )
NodeValues.Add(personElement.FirstChild.Value);
XMLNodeListBox.DataSource = NodeValues;
XMLNodeListBox.DataBind();
}
static void WriteXMLbyXmlWriter(XmlWriter writer, string symbol, double price, double change, long volume)
{
writer.WriteStartElement("Stock");
writer.WriteAttributeString("Symbol", symbol);
writer.WriteElementString("Price", XmlConvert.ToString(price));
writer.WriteElementString("Change", XmlConvert.ToString(change));
writer.WriteElementString("Volume", XmlConvert.ToString(volume));
writer.WriteEndElement();
}
private void CreateXMLFileButton_Click(object sender, System.EventArgs e)
{
// 建立一個表示所要產生的XML檔案路徑的字串。如果該路徑指向NTFS分區,則需要相關的存取權限。
string filename = XMLFilePathTextBox.Text;
// 建立一個寫入XML資料的檔案流
System.IO.FileStream myFileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create);
// 使用檔案流對象建立一個XmlTextWriter對象
XmlTextWriter myXmlWriter = new XmlTextWriter(myFileStream, System.Text.Encoding.Unicode);
myXmlWriter.Formatting = Formatting.Indented;
try
{
// 使用WriteXMLbyXmlWriter方法把資料寫入XmlTextWriter對象中
WriteXMLbyXmlWriter(myXmlWriter, "MSFT", 74.5, 5.5, 49020000);
// 通過Close方法的調用,XmlTextWriter對象的資料最終寫入XML檔案
myXmlWriter.Close();
Page.Response.Write("產生XML文檔成功!");
}
catch
{
Page.Response.Write("產生XML文檔失敗!請檢查路徑是否正確,以及是否有寫入許可權。");
}
}
Xml的檔案操作
XmlDocument的使用:
.Load
.SelectSingleNode
.CreateElement
.Save
dbGuest.xml
<?xml version="1.0" standalone="yes"?>
<dbGuest>
<User>
</User>
<User>
<Name>gloomyboyo</Name>
<City>fuzhou</City>
<Email>gloomyboyo@126.com</Email>
</User>
</dbGuest>
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
Bind();
}
private void Bind()
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath(".//db//dbGuest.xml"));
dgShow.DataSource = ds.Tables[0].DefaultView;
dgShow.DataBind();
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(".//db//dbGuest.xml"));
XmlNodeList elemList = doc.GetElementsByTagName("Name");
ddlName.Items.Clear();
for(int i=0;i<elemList.Count;i++)
ddlName.Items.Add(elemList[i].InnerXml);
}
private void btnQuery_Click(object sender, System.EventArgs e)
{//查詢
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(".//db//dbGuest.xml"));
lbEmail.Text = doc.SelectSingleNode("//User[Name='"+ddlName.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText;
}
private void btnDelete_Click(object sender, System.EventArgs e)
{//刪除
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath(".//db//dbGuest.xml"));
XmlNodeList xnl=xmlDoc.SelectSingleNode("dbGuest").ChildNodes;
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
XmlNodeList node = xe.GetElementsByTagName("Name");
if(node.Count>0)
{
if(node[0].InnerText==ddlName.SelectedItem.Text)
xe.RemoveAll();//刪除該節點的全部內容
break;
}
}
xmlDoc.Save(Server.MapPath(".//db//dbGuest.xml"));
Bind();
}
private void btnAdd_Click(object sender, System.EventArgs e)
{//添加
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath(".//db//dbGuest.xml"));
XmlNode root=xmlDoc.SelectSingleNode("dbGuest");//尋找<dbGuest>
XmlElement xe1=xmlDoc.CreateElement("User");//建立一個<User>節點
XmlElement xesub1=xmlDoc.CreateElement("Name");
xesub1.InnerText="Guset";//設定文本節點
xe1.AppendChild(xesub1);//添加到<User>節點中
XmlElement xesub2=xmlDoc.CreateElement("City");
xesub2.InnerText="上海";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("Email");
xesub3.InnerText="ss@22.net";
xe1.AppendChild(xesub3);
root.AppendChild(xe1);//添加到<dbGuest>節點中
xmlDoc.Save(Server.MapPath(".//db//dbGuest.xml"));
Bind();
}
private void btnChange_Click(object sender, System.EventArgs e)
{//查詢
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath(".//db//dbGuest.xml"));
XmlNodeList nodeList=xmlDoc.SelectSingleNode("dbGuest").ChildNodes;//擷取dbGuest節點的所有子節點
foreach(XmlNode xn in nodeList)//遍曆所有子節點
{
XmlElement xe=(XmlElement)xn;//將子節點類型轉換為XmlElement類型
XmlNodeList node = xe.GetElementsByTagName("Name");
if(node.Count>0)
{
if(node[0].InnerText==ddlName.SelectedItem.Text)
{
XmlNodeList nls=xe.ChildNodes;//繼續擷取xe子節點的所有子節點
foreach(XmlNode xn1 in nls)//遍曆
{
XmlElement xe2=(XmlElement)xn1;//轉換類型
if(xe2.Name=="Email")//如果找到
{
xe2.InnerText=tbNewMail.Text;//則修改
break;//找到退出來就可以了
}
}
break;
}
}
}
xmlDoc.Save(Server.MapPath(".//db//dbGuest.xml"));
Bind();
}
XMl檔案驗證
private void Page_Load(object sender, System.EventArgs e)
{
FileStream stream = new FileStream(Server.MapPath("people.xml"), FileMode.Open);
//建立XmlValidatingReader類的對象
XmlValidatingReader vr = new XmlValidatingReader(stream, XmlNodeType.Element, null);
//載入XML架構文檔
vr.Schemas.Add(null, Server.MapPath("people.xsd"));
//說明驗證的方式是根據XML架構
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
//對文檔進行驗證
while(vr.Read());
//顯示驗證過程完成
Page.Response.Write("<b>Validation finished!<b>");
//關閉開啟的檔案
stream.Close();
}
private void ValidationHandler(object sender, ValidationEventArgs args)
{
//顯示驗證失敗的訊息
Page.Response.Write("<b>Validation error: </b>" + args.Message + "<p>");
}
Xml傳送圖片
XmlDocument類的使用
Byte[] bt=new Byte[size];
String strData;
把位元組群組轉換為字串:
-String str=Convert.ToBase64String(bt);
把字串轉換為字串
-bt=Convert.FromBase64String(strData);
private void btnUpload_Click(object sender, System.EventArgs e)
{
//得到使用者要上傳的檔案名稱
string strFilePathName = loFile.PostedFile.FileName;
string strFileName = Path.GetFileName(strFilePathName);
int FileLength = loFile.PostedFile.ContentLength;
if(FileLength<=0)
return;
try
{
Byte[] FileByteArray = new Byte[FileLength]; //圖象檔案臨時儲存Byte數組
Stream StreamObject = loFile.PostedFile.InputStream; //建立資料流對像
//讀取圖象檔案資料,FileByteArray為資料儲存體,0為資料指標位置、FileLnegth為資料長度
StreamObject.Read(FileByteArray,0,FileLength);
string fileName = Server.MapPath(".//WriteXml.xml"); //要開啟的檔案
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNode root=xmlDoc.SelectSingleNode("dbImage");//尋找<dbGuest>
XmlNodeList xnl=xmlDoc.SelectSingleNode("dbImage").ChildNodes;
int nIndex = xnl.Count;
//以下添加新結點
XmlElement xe1=xmlDoc.CreateElement("Image");//建立一個<User>節點
XmlElement xesub1=xmlDoc.CreateElement("ImageID");
xesub1.InnerText=nIndex.ToString();//設定文本節點
xe1.AppendChild(xesub1);//添加到<User>節點中
XmlElement xesub2=xmlDoc.CreateElement("ImageContentType");
xesub2.InnerText=loFile.PostedFile.ContentType;
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("ImageSize");
xesub3.InnerText=FileLength.ToString();
xe1.AppendChild(xesub3);
XmlElement xesub4=xmlDoc.CreateElement("ImageDescription");
xesub4.InnerText=tbDescription.Text;
xe1.AppendChild(xesub4);
XmlElement xesub5=xmlDoc.CreateElement("ImageData");
xesub5.InnerText= Convert.ToBase64String(FileByteArray);
xe1.AppendChild(xesub5);
root.AppendChild(xe1);//添加到<dbGuest>節點中
xmlDoc.Save(fileName);
Response.Redirect("ShowAllImg.aspx");
}
catch
{
}
}
private void Page_Load(object sender, System.EventArgs e)
{
string fileName = Server.MapPath("./WriteXml.xml"); //要開啟的檔案
DataSet ds = new DataSet();
ds.ReadXml(fileName);
dgShow.DataSource = ds.Tables["image"].DefaultView;
dgShow.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
int ImgID = Convert.ToInt32(Request.QueryString["ID"]); //ID為圖片ID
//建立資料庫連結
string fileName = Server.MapPath(".//WriteXml.xml"); //要開啟的檔案
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNodeList node = xmlDoc.SelectSingleNode("//Image[ImageID='"+ImgID.ToString()+"']").ChildNodes;
if(node!=null)
{
string strType = node.Item(1).InnerText;
string strData =node.Item(4).InnerText;
int nSize = int.Parse(node.Item(2).InnerText);
Response.ContentType = strType;//設定輸出檔案類型
//輸出圖象檔案位元制
Response.OutputStream.Write(Convert.FromBase64String(strData), 0, nSize);
Response.End();
//也可以儲存為映像
// FileStream fs = new FileStream(@"C:/aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
// fs.Write((Convert.FromBase64String(strData), 0,nSize);
// fs.Close();
}
}