ASP.NET中的XML

來源:互聯網
上載者:User

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();
   }
  }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.