XML:
<?xml version="1.0" encoding="UTF-8"?>
<!--聊天记录-->
<Root>
<Record>
<Id>3</Id>
<SenderName>Administrator</SenderName>
<ReceiverName>所有人</ReceiverName>
<Msg><p>不知道啊</p></Msg>
<SendTime>2009-3-3 10:26:03</SendTime>
</Record>
</Root>
C#:
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/XML/ChatRecord.xml"));
//存储数据
XmlNode node = doc.SelectSingleNode("/Root/Record/Id");
node.InnerText = DateTime.Now.Month.ToString(); node = doc.SelectSingleNode("/Root/Record/SenderName");
node.InnerText = uName; node = doc.SelectSingleNode("/Root/Record/ReceiverName");
node.InnerText = user; node = doc.SelectSingleNode("/Root/Record/Msg");
node.InnerText = FCKeditor1.Value; node = doc.SelectSingleNode("/Root/Record/SendTime");
node.InnerText = DateTime.Now.ToString(); //保存
doc.Save(Server.MapPath("~/XML/ChatRecord.xml"));
现在的情况是能添加一条聊天记录,但是只有一条,一有新的记录 就覆盖了原有记录。就想问下如何添加新的<Record></Record>节点?每条记录一个<Record></Record>节点!
<?xml version="1.0" encoding="UTF-8"?>
<!--聊天记录-->
<Root>
<Record>
<Id>3</Id>
<SenderName>Administrator</SenderName>
<ReceiverName>所有人</ReceiverName>
<Msg><p>不知道啊</p></Msg>
<SendTime>2009-3-3 10:26:03</SendTime>
</Record>
</Root>
C#:
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/XML/ChatRecord.xml"));
//存储数据
XmlNode node = doc.SelectSingleNode("/Root/Record/Id");
node.InnerText = DateTime.Now.Month.ToString(); node = doc.SelectSingleNode("/Root/Record/SenderName");
node.InnerText = uName; node = doc.SelectSingleNode("/Root/Record/ReceiverName");
node.InnerText = user; node = doc.SelectSingleNode("/Root/Record/Msg");
node.InnerText = FCKeditor1.Value; node = doc.SelectSingleNode("/Root/Record/SendTime");
node.InnerText = DateTime.Now.ToString(); //保存
doc.Save(Server.MapPath("~/XML/ChatRecord.xml"));
现在的情况是能添加一条聊天记录,但是只有一条,一有新的记录 就覆盖了原有记录。就想问下如何添加新的<Record></Record>节点?每条记录一个<Record></Record>节点!
XmlElement record = doc.CreateElement("Record");
//存储数据
XmlNode node = record.SelectSingleNode("/Root/Record/Id");
node.InnerText = DateTime.Now.Month.ToString();
结果是node=null啊 是不是我的XML写的有问题?
1.没有巡环创建RECORD节点载数据。
2.在没有巡环创建对应RECORD节点下的子节点(ID、MSG等)的情况下就去用SELECTSINGLENODE方法获取你未创建的节点。这一点你不仿试下,按原有代码运行后,你去获取“/Root/Record/SendTime”这个节点,那么它是不为NULL的,而其它节点可能此时都为NULL,原因就在于此时可能仅存了最后一个覆盖其它节点后的节点信息,而“/Root/Record/SendTime”这个节点可能就是这最后一个节点我大至改了下你的代码,红色部分以后你可添加FOR或FOREACH语句编历:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!--聊天记录-->
<Root>
<Record>
<Id>3 </Id>
<SenderName>Administrator </SenderName>
<ReceiverName>所有人 </ReceiverName>
<Msg><p>不知道啊</p> </Msg>
<SendTime>2009-3-3 10:26:03 </SendTime>
</Record>
</Root>
C#:
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/XML/ChatRecord.xml"));
//存储数据
XmlNode root = doc.DocumentElement;//这里声明XML文件的NODE集合对象以待添加元素(节点) XmlElement elem = doc.CreateElement("record");//创建新的RECORD节点 XmlElement idNode=xmlDoc.CreateElement("ID"); //创建ID节点
idNode.InnerText= DateTime.Now.Month.ToString(); //为ID节点赋值
elem.AppendChild(idNode);//添加到RECORD节点下XmlElement senderNameNode=xmlDoc.CreateElement(“senderName”);//创建senderName节点
senderNameNode.InnerText= uName; //为senderName节点赋值
elem.AppendChild(senderNameNode);//添加到RECORD节点下
XmlElement ReceiverNameNode=xmlDoc.CreateElement(“ReceiverName”);//创建ReceiverName节点
ReceiverNameNode.InnerText= user; //为ReceiverName节点赋值
elem.AppendChild(ReceiverNameNode);//添加到RECORD节点下XmlElement MsgNode=xmlDoc.CreateElement(“Msg”);//创建Msg节点
ReceiverNameNode.InnerText= FCKeditor1.Value; //为Msg节点赋值
elem.AppendChild(MsgNode);//添加到RECORD节点下
XmlElement SendTimeNode=xmlDoc.CreateElement(“SendTime”);//创建SendTime节点
SendTimeNode.InnerText= FCKeditor1.Value; //为SendTime节点赋值
elem.AppendChild(SendTimeNode);//添加到RECORD节点下
root.AppendChild(elem);//将新RECORD节点加入到该XML文件的NODE集中(根节点中)doc.Save(Server.MapPath("~/XML/ChatRecord.xml"));
/*保存,请注意这最后一句代码别写入巡环 中,否则卡死浪费服务器资源。*/