将文本框值写入xml文件

时间:2013-04-04 11:06:50

标签: c# winforms xmlwriter

我一直在尝试将文本框值写入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>

5 个答案:

答案 0 :(得分:1)

然后使用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)));

答案 1 :(得分:0)

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

Root元素现在根据您的要求成为用户。

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

如果要重复添加子元素,请使用以下代码块,无论是单个还是循环。

xml.Add(
                       新的XElement(“用户”,                        新的XElement(“UserId”,“sunny”),                        新的XElement(“密码”,“密码”)                        )                     );

参考您的完整样本

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");

答案 2 :(得分:0)

如果您希望值显示为元素,则应使用XElement代替XAttribute ...

E.g。

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

要在root用户下添加这些元素:

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

答案 3 :(得分:0)

试试这个,

    var users= new XElement("Users");

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

    users.Add(userXml);

答案 4 :(得分:0)

我自己的回答

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>