将文本框值写入XML文件

本文关键字:XML 文件 文本 | 更新日期: 2023-09-27 18:07:25

我一直在尝试将文本框值写入xml文件,但无法获得正确的格式,因为我希望有

我使用以下代码

XDocument Xdoc = new XDocument(new XElement("Users"));
if (System.IO.File.Exists("D:''Users.xml"))
    Xdoc = XDocument.Load("D:''Users.xml");
else
    Xdoc = new XDocument();
XElement xml = /*new XElement("Users",*/
new XElement("User",
             new XAttribute("UserId", txtUserId.Text),
             new XAttribute("Password", txtPwd.Text));
if (Xdoc.Descendants().Count() > 0)
    Xdoc.Descendants().First().Add(xml);
else
    Xdoc.Add(xml);
Xdoc.Save("D:''Users.xml");

这里我得到了这种格式的xml

<User UserId="Sunny" Password="Sunny">
<User UserId="Sunny" Password="Sunny" />
<User UserId="Sunny" Password="Sunny" />
</User>

但是我想要这样

<Users>
  <User>
    <UserId>Sunny</UserId>
    <Password>pwd</Password>
  </User>
  <User>
    <UserId>Sunny</UserId>
    <Password>pwd</Password>
  </User>
</Users>

将文本框值写入XML文件

则使用XElement代替XAttribute。

 new XElement("User",
              new XElement("UserId", txtUserId.Text),
              new XElement("Password", txtPwd.Text));

和添加多个用户,假设您有userList:

 new XElement("Users",
        userList.Select(u=>
             new XElement("User",      
                 new XElement("UserId", u.UserId),
                 new XElement("Password", u.Password)));

我自己的回答

XDocument Xdoc = new XDocument(new XElement("Users"));
        if (System.IO.File.Exists("D:''Users.xml"))
            Xdoc = XDocument.Load("D:''Users.xml");
        else
        {
            Xdoc = new XDocument();
            XElement xmlstart = new XElement("Users");
            Xdoc.Add(xmlstart);
        }
        XElement xml = /*new XElement("Users",*/
                       new XElement("User",
          new XElement("UserId", txtUserId.Text),
          new XElement("Password", txtPwd.Text));
        if (Xdoc.Descendants().Count() > 0)
            Xdoc.Descendants().First().Add(xml);
        else
        {
            Xdoc.Add(xml);
        }
        Xdoc.Element("Users").Save("D:''Users.xml");

这给了我像

这样的xml
<?xml version="1.0" encoding="utf-8"?>
<Users>
  <User>
  <UserId>Sunny</UserId>
  <Password>Sunny</Password>
 </User>
 <User>
   <UserId>Sunny</UserId>
   <Password>Sunny</Password>
 </User>
 <User>
   <UserId>Sunny</UserId>
   <Password>Sunny</Password>
 </User>
</Users>

如果你想让这些值作为元素出现,那么你应该使用XElement而不是XAttribute

XElement xml = /*new XElement("Users",*/
                   new XElement("User",
                   new XElement("UserId", "sunny"),
                   new XElement("Password", "pwd")
                   );

要在根目录下添加这些元素,使用:

Xdoc.Element("Users").Add(xml);

只是从XAttribute更改为XElement。因为属性会被添加到元素内部,就像。元素扮演不同的角色,形成树形XML结构。

根据你的要求,根元素现在变成Users。

XElement xml = new XElement("Users",   
                       new XElement("User",
                       new XElement("UserId", "sunny"),
                       new XElement("Password", "pwd")
                       ));

如果要重复添加子元素,可以单独或循环使用下面的代码块。

xml。添加(
新的XElement("用户",new XElement("UserId", "sunny"),new XElement("Password", "pwd"))

);

参考完整的示例

XDocument Xdoc = new XDocument(new XElement("Users"));
        if (System.IO.File.Exists("D:''Users.xml"))
            Xdoc = XDocument.Load("D:''Users.xml");
        else
            Xdoc = new XDocument();
       XElement xml = /*new XElement("Users",*/
                       new XElement("User",
                       new XElement("UserId", "sunny"),
                       new XElement("Password", "pwd")
                       );
        if (Xdoc.Descendants().Count() > 0)
            Xdoc.Descendants().First().Add(xml);
        else
        {
            Xdoc.Add(xml);
        }
        Xdoc.Save("D:''Users.xml");

试一试,

    var users= new XElement("Users");
    var userXml= new XElement("User",
                   new XElement("UserId", txtUserId.Text),
                   new XElement("Password", txtPwd.Text)
                   );
    users.Add(userXml);