实际操作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();
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对象的实例。由它来分配创建,创建完后,再加到各个相应的节点实例上去。
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>
<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;
}
{
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);
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);