博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# 操作XML文件

Posted on 2007-12-14 19:40  孤峰皓月  阅读(784)  评论(0编辑  收藏  举报
SysSet.xml
 1<?xml version="1.0" encoding="utf-8"?>
 2<SysNode>
 3  <SysInfo Type="File">
 4    <FileType>exe,com,cmd,dll,lnk</FileType>
 5    <FileNumber>5</FileNumber>
 6    <FileSize>20</FileSize>
 7  </SysInfo>
 8  <SysInfo Type="AutoSave">
 9    <Interval>10</Interval>
10  </SysInfo>
11  <SysInfo Type="FileBackUp">
12    <DBBackFileUrl>E:\databake</DBBackFileUrl>
13    <WebSiteDirectory>E:\databake\ESFM.WebNoTice532</WebSiteDirectory>
14  </SysInfo>
15  <SysInfo Type="SMS_on-off">
16    <Value>0</Value>
17  </SysInfo>
18</SysNode>
操作代码:
 1string filePath = Server.MapPath(".")+ "\\SysSet.xml";
 2            XmlDocument xd = new XmlDocument();
 3            xd.Load(filePath);
 4            XmlNodeList nodeList = xd.SelectSingleNode("SysNode").ChildNodes;
 5            foreach(XmlNode xn in nodeList)
 6            {
 7                if(xn.Attributes["Type"].Value == "File")
 8                {
 9                    this.AttType.Value = xn.SelectSingleNode("FileType").InnerText;
10                    this.AttNum.Value = xn.SelectSingleNode("FileNumber").InnerText;
11                    this.AttSize.Value = xn.SelectSingleNode("FileSize").InnerText;
12                }

13                else if (xn.Attributes["Type"].Value == "AutoSave")
14                {
15                    this.AutoTime.Value = xn.SelectSingleNode("Interval").InnerText; 
16                }

17                else if (xn.Attributes["Type"].Value == "FileBackUp")
18                {
19                    this.DBBackUrl.Value = xn.SelectSingleNode("DBBackFileUrl").InnerText;
20                    this.FileBackDir.Value = xn.SelectSingleNode("WebSiteDirectory").InnerText;
21                }

22                else if (xn.Attributes["Type"].Value == "SMS_on-off")
23                {
24                    if (xn.SelectSingleNode("Value").InnerText == "0")
25                    {
26                        this.btnOnOff.Text = "开通";
27                    }

28                    else this.btnOnOff.Text = "关闭";
29                }

30            }


我现在想用c#的form中的几个textbox写入数据到xml中,然后在读出来~  
  代码如下:  
  1。写入xml文件。  
  XmlTextWriter   write=new   XmlTextWriter("Filesheet.xml",null);  
  write.Formatting=Formatting.Indented;  
  write.WriteStartDocument();  
  write.WriteStartElement("Filesheet");  
  write.WriteAttributeString("xmlns",null,"http://tempuri.org/Filesheet.xsd");  
  write.WriteStartElement("fsite",null);  
  write.WriteAttributeString("flable",txtsite.Text);  
  write.WriteEndAttribute();  
  write.WriteAttributeString("fzhuji",txtzhuji.Text);  
  write.WriteEndAttribute();  
  write.WriteAttributeString("fuser",txtuser.Text);  
  write.WriteEndAttribute();  
  write.WriteAttributeString("fpassword",txtpassword.Text);  
  write.WriteEndAttribute();  
  write.WriteAttributeString("fdankou",txtdankou.Text);  
  write.WriteEndAttribute();  
  write.WriteAttributeString("fzhushi",txtzhushi.Text);  
  write.WriteEndAttribute();  
  write.WriteEndElement();  
  write.Flush();  
  write.WriteEndDocument();  
  write.Close(); 问题点数:30、回复次数:10Top

照片处理软件下载

1 楼zxphf( 海 风)回复于 2005-04-01 09:38:22 得分 0

2。读取xml  
  XmlDocument   doc=new   XmlDocument();  
  doc.Load("Filesheet.xml");  
  XmlNode   node=doc.DocumentElement.FirstChild;  
  //XmlNamedNodeMap   attrs=node.Attributes;  
  XmlAttributeCollection   attrs=node.Attributes;  
  txtsite.Text=attrs[0].Value;  
  txtzhuji.Text=attrs[1].Value;  
  txtuser.Text=attrs[2].Value;  
  txtpassword.Text=attrs[3].Value;  
  txtzhushi.Text=attrs[4].Value;Top

2 楼zxphf( 海 风)回复于 2005-04-01 09:40:29 得分 0

现在遇到问题,我的文档只能写一条记录~有没有谁有更好的控制和方法~最好给我要实现的这样的代码。欢迎强人来解答啊~Top

3 楼zxphf( 海 风)回复于 2005-04-01 09:41:21 得分 0

3。还有这个  
  <?xml   version="1.0"   encoding="utf-8"   ?>  
  <xsd:schema   xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <xsd:element   name="fsite">  
  <xsd:complexType>  
  <xsd:attribute   name="flable"   type="xsd:string"   />  
  <xsd:attribute   name="fzhuji"   type="xsd:string"   />  
  <xsd:attribute   name="fuser"   type="xsd:string"   />  
  <xsd:attribute   name="fpassword"   type="xsd:string"   />  
  <xsd:attribute   name="fduankou"   type="xsd:int"   />  
  <xsd:attribute   name="fzhushi"   type="xsd:string"   />  
  </xsd:complexType>  
  </xsd:element>  
  </xsd:schema>Top

4 楼littlekeen(keen)回复于 2005-04-01 09:54:11 得分 15

读取xml:例子里是直接在页面显示出来  
  public   class   readXml   :   System.Web.UI.Page  
  {  
  private   const   string   filename   =   "d:\\aa.xml";  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  XmlTextReader   reader   =   null;  
   
  try    
  {  
                 
  //   Load   the   reader   with   the   data   file   and   ignore   all   white   space   nodes.                    
  reader   =   new   XmlTextReader(filename);  
  reader.WhitespaceHandling   =   WhitespaceHandling.None;  
   
  //   Parse   the   file   and   display   each   of   the   nodes.  
  while   (reader.Read())    
  {  
  switch   (reader.NodeType)    
  {  
  case   XmlNodeType.Element:  
  Response.Write(   reader.Name);  
  break;  
  case   XmlNodeType.Text:  
  Response.Write(reader.Value);  
  break;  
  case   XmlNodeType.CDATA:  
  Response.Write(reader.Value);  
  break;  
  case   XmlNodeType.ProcessingInstruction:  
  Response.Write(   reader.Name+   reader.Value);  
  break;  
  case   XmlNodeType.Comment:  
  Response.Write(reader.Value);  
  break;  
  case   XmlNodeType.XmlDeclaration:  
  Response.Write("<?xml   version='1.0'?>");  
  break;  
  case   XmlNodeType.Document:  
  break;  
  case   XmlNodeType.DocumentType:  
  Response.Write(   reader.Name+   reader.Value);  
  break;  
  case   XmlNodeType.EntityReference:  
  Response.Write(reader.Name);  
  break;  
  case   XmlNodeType.EndElement:  
  Response.Write(   reader.Name);  
  break;  
  }                
  }                        
  }  
   
  finally    
  {  
  if   (reader!=null)  
  reader.Close();  
  }  
   
  }Top

5 楼zxphf( 海 风)回复于 2005-04-01 09:59:28 得分 0

我怎么感觉不怎么和我的很相同啊。。?  
  我现在想用c#的form中的几个textbox写入数据到xml中,然后在读出来~  
  写的过程我只能写一条记录,再写的时候他就覆盖第一条记录的。上面的代码只是为了更好的说明的  
  不过还是很感谢你的~  
  Top

6 楼qozms(博德之门)回复于 2005-04-01 10:06:17 得分 10

在C#中操作XML    
   
   
  我用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程。  
     
      已知有一个XML文件(bookstore.xml)如下:  
   
   
    <?xml   version="1.0"   encoding="gb2312"?>  
  <bookstore>  
      <book   genre="fantasy"   ISBN="2-3631-4">  
          <title>Oberon's   Legacy</title>  
          <author>Corets,   Eva</author>  
          <price>5.95</price>  
      </book>  
  </bookstore>  
   
     
   
   
     
      1、往<bookstore>节点中插入一个<book>节点:  
   
   
   
   
        XmlDocument   xmlDoc=new   XmlDocument();  
        xmlDoc.Load("bookstore.xml");  
        XmlNode   root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>  
        XmlElement   xe1=xmlDoc.CreateElement("book");//创建一个<book>节点  
        xe1.SetAttribute("genre","李赞红");//设置该节点genre属性  
        xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性  
     
        XmlElement   xesub1=xmlDoc.CreateElement("title");  
        xesub1.InnerText="CS从入门到精通";//设置文本节点  
        xe1.AppendChild(xesub1);//添加到<book>节点中  
         
        XmlElement   xesub2=xmlDoc.CreateElement("author");  
        xesub2.InnerText="候捷";  
        xe1.AppendChild(xesub2);  
         
        XmlElement   xesub3=xmlDoc.CreateElement("price");  
        xesub3.InnerText="58.3";  
        xe1.AppendChild(xesub3);  
     
        root.AppendChild(xe1);//添加到<bookstore>节点中  
        xmlDoc.Save("bookstore.xml");  
   
     
   
   
   
      //================  
      结果为:  
   
   
   
   
    <?xml   version="1.0"   encoding="gb2312"?>  
  <bookstore>  
      <book   genre="fantasy"   ISBN="2-3631-4">  
          <title>Oberon's   Legacy</title>  
          <author>Corets,   Eva</author>  
          <price>5.95</price>  
      </book>  
      <book   genre="李赞红"   ISBN="2-3631-4">  
          <title>CS从入门到精通</title>  
          <author>候捷</author>  
          <price>58.3</price>  
      </book>  
  </bookstore>  
   
     
   
   
   
  2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。  
   
   
            XmlNodeList   nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点  
        foreach(XmlNode   xn   in   nodeList)//遍历所有子节点  
        {  
          XmlElement   xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型  
          if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”  
          {  
            xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”  
     
            XmlNodeList   nls=xe.ChildNodes;//继续获取xe子节点的所有子节点  
            foreach(XmlNode   xn1   in   nls)//遍历  
            {  
              XmlElement   xe2=(XmlElement)xn1;//转换类型  
              if(xe2.Name=="author")//如果找到   
              {  
                xe2.InnerText="亚胜";//则修改  
                break;//找到退出来就可以了  
              }  
            }  
            break;  
          }  
        }  
     
        xmlDoc.Save("bookstore.xml");//保存。  
   
     
   
   
      //=================  
   
      最后结果为:  
   
   
    <?xml   version="1.0"   encoding="gb2312"?>  
  <bookstore>  
      <book   genre="fantasy"   ISBN="2-3631-4">  
          <title>Oberon's   Legacy</title>  
          <author>Corets,   Eva</author>  
          <price>5.95</price>  
      </book>  
      <book   genre="update李赞红"   ISBN="2-3631-4">  
          <title>CS从入门到精通</title>  
          <author>亚胜</author>  
          <price>58.3</price>  
      </book>  
  </bookstore>  
   
     
   
     
      3、删除   <book   genre="fantasy"   ISBN="2-3631-4">节点的genre属性,删除   <book   genre="update李赞红"   ISBN="2-3631-4">节点。  
   
   
    XmlNodeList   xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;  
     
        foreach(XmlNode   xn   in   xnl)  
        {  
          XmlElement   xe=(XmlElement)xn;  
     
   
        if(xe.GetAttribute("genre")=="fantasy")  
          {  
            xe.RemoveAttribute("genre");//删除genre属性  
          }  
          else   if(xe.GetAttribute("genre")=="update李赞红")  
          {  
            xe.RemoveAll();//删除该节点的全部内容  
          }  
        }  
        xmlDoc.Save("bookstore.xml");  
   
      //====================  
       
      最后结果为:  
   
   
    <?xml   version="1.0"   encoding="gb2312"?>  
  <bookstore>  
      <book   ISBN="2-3631-4">  
          <title>Oberon's   Legacy</title>  
          <author>Corets,   Eva</author>  
          <price>5.95</price>  
      </book>  
      <book>  
      </book>  
  </bookstore>    
   
     
      4、显示所有数据。  
   
   
      XmlNode   xn=xmlDoc.SelectSingleNode("bookstore");  
     
        XmlNodeList   xnl=xn.ChildNodes;  
         
        foreach(XmlNode   xnf   in   xnl)  
        {  
          XmlElement   xe=(XmlElement)xnf;  
          Console.WriteLine(xe.GetAttribute("genre"));//显示属性值  
          Console.WriteLine(xe.GetAttribute("ISBN"));  
     
          XmlNodeList   xnf1=xe.ChildNodes;  
          foreach(XmlNode   xn2   in   xnf1)  
          {  
            Console.WriteLine(xn2.InnerText);//显示子节点点文本  
          }  
        }    
     
   
   
   
   
  转载自:http://blog.csdn.net/s98/archive/2004/10/17/140307.aspx  
     
   
   
     
   
   
   
     
   
   
  版权声明:是本Blog托管服务提供商。如本文牵涉版权问题,不承担相关责任,请版权拥有者直接与文章作者联系解决。  
   
  [点击此处收藏本文]    
  发表于   2004年10月17日   11:48   PM    
   
   
  评论  
  #   回复:在C#中操作XML   2005-03-01   9:02   AM   momo    
  xmlDoc.load(request)=true    
   
  这句话表示什么意思?    
   
   
   
  发表评论  
  标题:      
  请输入标题      
  大名:      
  请输入尊姓大名      
  网址:        
  评论      
  请输入评论    
       
          记住我?    
     
   
  Powered   by:    
       
  Copyright   ?   Johnny    
  Top

7 楼zxphf( 海 风)回复于 2005-04-01 10:24:09 得分 0

能不能看看我的问题在发啊  
  我现在是想:为什么写进去的数据总覆盖第一条,那样我的文件里面老只有一条记录的~Top

8 楼zxphf( 海 风)回复于 2005-04-01 11:09:43 得分 0

没人知道吗?我想应该有高手在的啊  
  高手门,拜托拉,这个问题我已经搞了好多天了啊~  
  不知道帮忙顶一下啊Top

9 楼sj_breezerain(breeze-rain)回复于 2005-04-01 14:40:54 得分 5

qozms(红翻天)   的写法不会覆盖第一条的啊!Top