实际操作xml的代码

向xml中添加一节点:

    
      XmlDocument doc = new XmlDocument();
    doc.Load(MapPath(
"db\\db.xml"));
    XmlNode node 
= doc.CreateElement("Item");
     
    XmlAttribute xmlattr 
= doc.CreateAttribute("UserName");
    xmlattr.Value 
= XmlConvert.DecodeName(TextBoxUName.Text);
    node.Attributes.Append(xmlattr);

    xmlattr 
= doc.CreateAttribute("UserEmail");
    xmlattr.Value 
= XmlConvert.DecodeName(TextBoxMail.Text);
    node.Attributes.Append(xmlattr);

    xmlattr 
= doc.CreateAttribute("Content");
    xmlattr.Value 
= XmlConvert.DecodeName(TextBoxTxt.Text);
    node.Attributes.Append(xmlattr);

    xmlattr 
= doc.CreateAttribute("SendTime");
    xmlattr.Value 
= XmlConvert.DecodeName(DateTime.Now.ToString());
    node.Attributes.Append(xmlattr);

    doc.ChildNodes[
0].AppendChild(node);
    doc.Save(MapPath(
"db\\db.xml"));
    Response.Redirect(
"MessageList.aspx");


提取xml显示到DataGrid中:
 FileStream stream = new FileStream(Server.MapPath("db\\db.xml"),FileMode.Open);
   
try
   
{
    XmlDataDocument doc 
= new XmlDataDocument();
    doc.DataSet.ReadXml(
new StreamReader(stream));
    
if(doc.DataSet.Tables.Count != 0 && doc.DataSet.Tables[0].Rows.Count!=0)
    
{
     DataList1.DataSource 
= doc.DataSet.Tables[0].DefaultView ;
     DataList1.DataBind();
    }

    stream.Close();


创建一个xml文档并保存:
            XmlDocument doc = new XmlDocument();            

             XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","","yes"); //创建xml描述
            doc.PrependChild(dec); //将指定节点添加到该节点的头列表

            XmlElement element 
= doc.CreateElement("ROOT"); 
            doc.AppendChild(element); 
//增加根结点root

            XmlElement childitem 
= doc.CreateElement("Item"); //创建一个节点Item
            
            XmlAttribute attr
=doc.CreateAttribute("UserName"); //创建一个属性UserName
            attr.Value="Shipfi"//UserName属性的值是Shipfi

            childitem.Attributes.Append(attr); 
//把该属性绑定到节点item上去

            XmlElement element2
= doc.CreateElement("ASPX"); //创建另一个节点ASPX
            element2.InnerText="browse.aspx"//该节点的内容是browse.aspx,这一句可以改为:  XmlText nodeText = doc.CreateTextNode("browse.aspx"); 如果用xmlText使用的话,则需要在后面代码中加入: element2.AppendChild(nodeText); 把值加进节点中去.

            childitem.AppendChild(element2); //把该节点绑定到节点item上去,做为item的子节点
            

            element.AppendChild(childitem); 
//最后,把item节点再绑定到根结点root上去

            doc.Save(
@"D:\XF\XMLTest\db.xml"); //存档

//由此可以看出:无论在xml创建属性,根节点,子节点,内容,都需要用到XmlDocument对象的实例。由它来分配创建,创建完后,再加到各个相应的节点实例上去。


查找某个节点:
有xml如下:
<bookstore>
  
<book genre='novel' ISBN='10-861003-324'>
    
<title>The Handmaid's Tale</title>
    
<price>19.95</price>
  
</book>
  
<book genre='novel' ISBN='1-861001-57-5'>
    
<title>Pride And Prejudice</title>
    
<price>24.95</price>
  
</book>
</bookstore>


想找到ISBN为'10-861003-324'的那本书的情况怎么办呢?代码如下:
protected XmlElement fildElement(XmlDocument doc,string ISBN)
        
{
            XmlElement nodeFound 
= null;
            XmlElement root 
= doc.DocumentElement; //获取文档的根

            XmlNodeList nodelist 
= root.GetElementsByTagName("book");

            
//我的理解:以上两句代码,也可以用 XmlNodeList nodelist = doc.GetElementsByTagName("book");来使用,只要doc是作为XmlDocument对象的实例。

            
foreach(XmlNode node in nodelist)
            
{
                
if(node is System.Xml.XmlElement)
                
{
                    XmlElement element2 
= (XmlElement)node;
                    
string strISBN = element2.GetAttribute("ISBN"); //找出节点相应的属性值

                    
if(strISBN!="" && strISBN==ISBN) //找到该节点
                    {
                        nodeFound
=element2;
                        
break;
                    }

                }

            }

            
return nodeFound;
        }


找到节点,读取或设置其子节点的值:
if(nodeFound==null)
                
return;

            nodelist 
=  nodeFound.ChildNodes; //获取所有子节点

            
for(int i=0;i<nodelist.Count;i++)
            
{
                XmlNode node 
= nodelist.Item(i); //取出每个子节点

                
if(node is System.Xml.XmlElement) //如果是节点
                {
                    XmlElement element3 
= (XmlElement)node;
                    
string sName = element3.Name;
                    
string sValue = "";

                    
if(sName=="title"//如果子节点是title
                        Console.Write("书名是:"+element3.InnerText); //获得该节点title的值
                    if(sName="price"//如果子节点是price
                        Console.Write("价格是:"+element3.InnerText); 

//                    //以上是读取某个值,如果想更新该书的价格或书名呢?见下:
//                    if(sName=="title")
//                        sValue="更改后的书名"; //
//                    if(sName=="price")
//                        sValue="更改后的价格";
//                    else
//                        continue;
//
//                    element3.InnerText=sValue;//或者代码也可以像下面一样:
//
//                    XmlText nodetext = doc.CreateTextNode(sValue);
//                    element3.ReplaceChild(nodetext,element3.FirstChild);
posted @ 2005-05-16 14:28  shipfi  阅读(535)  评论(1编辑  收藏  举报