0

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

5 回答 5

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)));
于 2013-04-04T11:10:05.073 回答
1

我自己的答案

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>
于 2013-04-04T11:33:14.340 回答
0

它只是从 XAttribute 更改为 XElement。因为属性会像 . 元素扮演不同的角色,形成树状 XML 结构。

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

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

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

xml.Add(
new XElement("User", 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");
于 2013-04-04T11:11:48.507 回答
0

如果您希望这些值显示为元素,那么您应该使用XElement而不是XAttribute...

例如

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

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

Xdoc.Element("Users").Add(xml);
于 2013-04-04T11:16:44.583 回答
0

试试这个,

    var users= new XElement("Users");

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

    users.Add(userXml);
于 2013-04-04T11:32:54.390 回答