我用以下代码将一组FORM的数据存储到XML文档可以实现,但是当我再次调用该函数的时候,就会覆盖前面保存的数据,如果我想在以保存的数据下面继续保存写入的数据改怎么写,麻烦个位帮个忙指点下,呵呵~!!!
public void XmlDocument()
{ string ServerIp = this.ServerIpBox.Text;
string ServerName = this.ServerNameBox.Text;
string ServerPort = this.ServerPortBox.Text;
string UserName = this.UserNameBox.Text;
string UserPwd = this.UserPwdBox.Text; XmlDocument doc = new XmlDocument();
XmlElement friendsinfo = doc.CreateElement("ViewManage");
XmlDeclaration sm = doc.CreateXmlDeclaration("1.0", "GB2312", "no");
doc.AppendChild(sm);
doc.AppendChild(friendsinfo); XmlElement hy = doc.CreateElement("ViewPara");
hy.SetAttribute("nodeText", ServerName);
XmlElement ip = doc.CreateElement("IP");
ip.AppendChild(doc.CreateTextNode(ServerIp));
hy.AppendChild(ip); XmlElement port = doc.CreateElement("Port");
port.AppendChild(doc.CreateTextNode(ServerPort));
hy.AppendChild(port); XmlElement name = doc.CreateElement("Username");
name.AppendChild(doc.CreateTextNode(UserName));
hy.AppendChild(name); XmlElement PassWord = doc.CreateElement("UserPwd");
PassWord.AppendChild(doc.CreateTextNode(UserPwd));
hy.AppendChild(PassWord); friendsinfo.AppendChild(hy); doc.Save("ViewConfig.xml");
}
public void XmlDocument()
{ string ServerIp = this.ServerIpBox.Text;
string ServerName = this.ServerNameBox.Text;
string ServerPort = this.ServerPortBox.Text;
string UserName = this.UserNameBox.Text;
string UserPwd = this.UserPwdBox.Text; XmlDocument doc = new XmlDocument();
XmlElement friendsinfo = doc.CreateElement("ViewManage");
XmlDeclaration sm = doc.CreateXmlDeclaration("1.0", "GB2312", "no");
doc.AppendChild(sm);
doc.AppendChild(friendsinfo); XmlElement hy = doc.CreateElement("ViewPara");
hy.SetAttribute("nodeText", ServerName);
XmlElement ip = doc.CreateElement("IP");
ip.AppendChild(doc.CreateTextNode(ServerIp));
hy.AppendChild(ip); XmlElement port = doc.CreateElement("Port");
port.AppendChild(doc.CreateTextNode(ServerPort));
hy.AppendChild(port); XmlElement name = doc.CreateElement("Username");
name.AppendChild(doc.CreateTextNode(UserName));
hy.AppendChild(name); XmlElement PassWord = doc.CreateElement("UserPwd");
PassWord.AppendChild(doc.CreateTextNode(UserPwd));
hy.AppendChild(PassWord); friendsinfo.AppendChild(hy); doc.Save("ViewConfig.xml");
}
1。确认在指定路径找ViewConfig.xml文件,如果文件不存在就用你现在的方式,添加数据,保存文件;
2。如果文件存在,则需要先读取ViewConfig.xml这个文件,然后在节点数据后增加新数据结点,然后再保存文件。
//parentNode,要插入节点的父节点名称
public static void AppendXML(string xmlPath, string parentNode)
{
XmlDocument doc=new XmlDocument();
doc.Load(xmlPath);
//创建一个新的menber节点并将它添加到根节点下
XmlElement xel= doc.CreateElement(parentNode);
doc.DocumentElement.PrependChild(xel);
doc.Save(xmlPath);
}
{
dsXML.ReadXml("ViewConfig.xml");
}
Xmls(ServerName, ServerIp, ServerPort, UserName, UserPwd);
DataRow xmlRow = dsXML.Tables["ViewPara"].NewRow();
xmlRow["Name"] = this.ServerNameBox.Text;
xmlRow["IP"] = this.ServerIpBox.Text;
xmlRow["Port"] = this.ServerPortBox.Text;
xmlRow["Username"] = this.UserNameBox.Text;
xmlRow["UserPwd"] = this.UserPwdBox.Text;
dsXML.Tables["ViewPara"].Rows.Add(xmlRow);
dsXML.WriteXml(@"ViewConfig.xml");
我用以上方法可以将数据直接写到已有的数据后面,但是确不知道能不能将xmlRow["Name"] = this.ServerNameBox.Text的值作为属性写到"ViewPara"的后面,就像这段代码实现的功能 XmlElement hy = doc.CreateElement("ViewPara");hy.SetAttribute("nodeText", ServerName);还能高手解惑~!
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<ViewManagement>
<ViewPara>
<Name>1</Name>
<IP>1</IP>
<Port>1</Port>
<Username>1</Username>
<UserPwd>1</UserPwd>
</ViewPara>
</ViewManagement>你的parentNode参数指的是<ViewManagement>还是<ViewPara>啊?
上面那种方法只能添加到xml的根目录与你的<ViewManagement>节点平级。
你是想要添加到哪里啊?
//parentNode,要插入节点的父节点名称
public void AppendXML(string xmlPath, string parentNode)
{
string ServerIp = this.ServerIpBox.Text;
string ServerName = this.ServerNameBox.Text;
string ServerPort = this.ServerPortBox.Text;
string UserName = this.UserNameBox.Text;
string UserPwd = this.UserPwdBox.Text; XmlDocument doc = new XmlDocument();
doc.Load(xmlPath);
//创建一个新的menber节点并将它添加到根节点下
XmlElement xel = doc.CreateElement(parentNode);
xel.SetAttribute("nodeText", ServerName);
doc.DocumentElement.PrependChild(xel);
XmlElement ip = doc.CreateElement("IP");
ip.AppendChild(doc.CreateTextNode(ServerIp));
xel.AppendChild(ip); XmlElement port = doc.CreateElement("Port");
port.AppendChild(doc.CreateTextNode(ServerPort));
xel.AppendChild(port); XmlElement name = doc.CreateElement("Username");
name.AppendChild(doc.CreateTextNode(UserName));
xel.AppendChild(name); XmlElement PassWord = doc.CreateElement("UserPwd");
PassWord.AppendChild(doc.CreateTextNode(UserPwd));
xel.AppendChild(PassWord);
doc.Save(xmlPath);
}
这是我改后的代码
结果如下:
- <ViewManage>
- <ViewPara nodeText="2">
<IP>2</IP>
<Port>2</Port>
<Username>2</Username>
<UserPwd>2</UserPwd>
</ViewPara>
- <ViewPara nodeText="1">
<IP>1</IP>
<Port>1</Port>
<Username>1</Username>
<UserPwd>1</UserPwd>
</ViewPara>
</ViewManage>
永远在第一位,然后在它的下面<ViewPara nodeText="2"><ViewPara nodeText="3">以此类推这样写下去?
改成doc.DocumentElement.AppendChild(xel);试试