After The End

通过Dataset操作xml数据(添加,删除,修改)

1)cameralist.xml文件的主要内容:
<?xml version="1.0" encoding="utf-8"?>
<subway>
    <station name="地点1" id="0">
      <camera dvrip="192.168.4.61" channel="1" cameraid="1">No.1 street</camera>
      <camera dvrip="192.168.4.61" channel="2" cameraid="2">No.2 street</camera>
    </station>
</subway>
篇幅原因只设置了一个站点。
2)cameralist.xsd文件内容:
<?xml version="1.0" standalone="yes"?>
<xs:schema id="subway" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="subway" msdata:IsDataSet="true" msdata:Locale="en-US">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="station">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="camera" nillable="true" minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <xs:simpleContent msdata:ColumnName="camera_Text" msdata:Ordinal="3">
                      <xs:extension base="xs:string">
                        <xs:attribute name="dvrip" type="xs:string" />
                        <xs:attribute name="channel" type="xs:string" />
                        <xs:attribute name="cameraid" type="xs:string" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
              <xs:attribute name="name" type="xs:string" />
              <xs:attribute name="id" type="xs:string" />
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
</xs:schema>
用于设置dataset 中datatables的column及各table之间的干系;可用如下方法生成:
System.Data.DataSet ds = new System.Data.DataSet();
              ds.ReadXml("cameralist.xml");
              ds.WriteXmlSchema("cameralist.xsd");        …………
3)xml文件的操作:
using System;
using System.Collections.Generic;
using System.Text;
namespace cameras
{
      class CameraXmlData
      {
          public static System.Xml.XmlDataDocument CameraXdoc;         //采用静态的XmlDataDocument的变量,将xml文件转化为DataSet进行操作
          public static Int32 NumberOfStation;                          //站点的个数
          public CameraXmlData()
          {
          }
          //
          //初始化CameraXdoc,及NumberOfStation;
          //CameraXdoc.DataSet中有两天DataTable:
          //CameraXdoc.DataSet.Tables["station"],其中的列:name,id,station_Id(在xml中隐藏)
          //CameraXdoc.DataSet.Tables["camera"],其中的列:dvrip,channel,cameraid,camera_Text,station_Id(隐藏)
          //注意:存储Tables["camera"]时必须将其station_Id的值与Tables["station"]中station_Id的值相对应,否则会出现问题
          //
          public void loadxmldata(string xmlfile, string xsdfile)
          {
              CameraXdoc = new System.Xml.XmlDataDocument();
              CameraXdoc.DataSet.ReadXmlSchema(xsdfile);          
              CameraXdoc.Load(xmlfile);
              NumberOfStation = CameraXdoc.DataSet.Tables["station"].Rows.Count;
          }
          //
          //station------------------------------------------------------------------------------------------
          //
        
          public string addstation(string name)
          {
              System.Data.DataRow stationrow = CameraXdoc.DataSet.Tables["station"].NewRow();
              stationrow["name"] = name;
              string id = ((Int32)CameraXdoc.DataSet.Tables["station"].Rows[NumberOfStation - 1]["station_Id"] + 1).ToString();
              stationrow["id"] = id;
              CameraXdoc.DataSet.Tables["station"].Rows.Add(stationrow);
              NumberOfStation = NumberOfStation + 1;
              return id;
          }
          public void addstation(string name, string dvrip, string channel, string camera_Text)
          {
              System.Data.DataRow stationrow = CameraXdoc.DataSet.Tables["station"].NewRow();
              stationrow["name"] = name;
              stationrow["id"] = ((Int32)CameraXdoc.DataSet.Tables["station"].Rows[NumberOfStation - 1]["station_Id"] + 1).ToString();
              CameraXdoc.DataSet.Tables["station"].Rows.Add(stationrow);
              Int32 station_Id = (Int32)stationrow["station_Id"];
              addcamera(dvrip, channel, camera_Text, station_Id);
              NumberOfStation = NumberOfStation + 1;

          }
          public void editstation(string name,string id)
          {
              System.Data.DataRow[] drs = CameraXdoc.DataSet.Tables["station"].Select("id=" + id);
              if (drs.GetLength(0) == 0) return;
              else
              {
                  for (int i = 0; i < drs.GetLength(0); i++)
                  {
                      drs[i]["name"] = name;
                  }
              }
          }
          public void deletestation(string id)
          {
              System.Data.DataRow[] drs = CameraXdoc.DataSet.Tables["station"].Select("id=" + id);
              if (drs.GetLength(0) == 0) return;
              else
              {
                  for (int i = 0; i < drs.GetLength(0); i++)
                  {
                      Int32 station_Id = (Int32)drs[i]["station_Id"];
                      System.Data.DataRow[] drs1= CameraXdoc.DataSet.Tables["camera"].Select("station_Id=" + station_Id);
                      for (int j = 0; j < drs1.GetLength(0); j++) drs1[j].Delete();
                      drs[i].Delete();
                  }
              }
          }
          //
          //camera
          //
          public string addcamera(string dvrip, string channel, string camera_Text, Int32 station_Id)
          {
              System.Data.DataRow camerarow = CameraXdoc.DataSet.Tables["camera"].NewRow();
              camerarow["dvrip"] = dvrip;
              camerarow["channel"] = channel;
              camerarow["camera_Text"] = camera_Text;
              Int32 n=CameraXdoc.DataSet.Tables["camera"].Rows.Count;
              Int32 tem = Int32.Parse(CameraXdoc.DataSet.Tables["camera"].Rows[n - 1]["cameraid"].ToString()) + 1;
              string cameraid = (Int32.Parse(CameraXdoc.DataSet.Tables["camera"].Rows[n - 1]["cameraid"].ToString()) + 1).ToString();
              camerarow["cameraid"] = cameraid;
              camerarow["station_Id"] = station_Id;
              CameraXdoc.DataSet.Tables["camera"].Rows.Add(camerarow);
              return cameraid;
          }
          public void editcamera(string dvrip, string channel, string camera_Text, string cameraid)
          {
              System.Data.DataRow[] drs = CameraXdoc.DataSet.Tables["camera"].Select("cameraid=" + cameraid);
              if (drs.GetLength(0) == 0) return;
              else
              {
                  for (int i = 0; i < drs.GetLength(0); i++)
                  {
                      drs[i]["dvrip"] = dvrip;
                      drs[i]["channel"] = channel;
                      drs[i]["camera_Text"] = camera_Text;
                    
                  }
              }
          }

          public Int32 getstation_Id(string id)
          {
              string temp = id.Trim();
              System.Data.DataRow[] drs = CameraXdoc.DataSet.Tables["station"].Select("id="+temp);
              if (drs.GetLength(0) == 0) return 0;
              else
              {
                  String tem = drs[0]["station_Id"].ToString();
                  return (Int32)drs[0]["station_Id"];
              }
          }
          public void deletecamera(string cameraid)
          {
              System.Data.DataRow[] drs = CameraXdoc.DataSet.Tables["camera"].Select("cameraid=" + cameraid);
              if (drs.GetLength(0) == 0) return;
              else
              {
                  for (int i = 0; i < drs.GetLength(0); i++)
                      drs[i].Delete();
              }
          }

          //
          //save changes
          //
          public void SaveChanges()
          {
              CameraXdoc.DataSet.AcceptChanges();  
              CameraXdoc.Save("cameralist.xml");
            //    CameraXdoc.DataSet.WriteXml("te.xml",System.Data.XmlWriteMode.DiffGram);
          }
      }
}

posted on 2007-05-18 20:04  zhanjh  阅读(1075)  评论(0)    收藏  举报

导航