2013-04-04 45 views
0

我一直在試圖寫文本框的值到XML文件,但在正確的格式無法得到它,因爲我希望有書面方式文本框的值,以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> 

回答

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> 
1

然後使用XElement代替XAttribute。

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

並添加多個用戶,因爲你有用戶名單:

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

如何將用戶添加爲根元素? – 2013-04-04 11:12:55

+0

更新的答案包括頂部用戶元素 – alex 2013-04-04 11:15:53

+0

什麼我userList這裏 – 2013-04-04 11:17:19

0

它只是從XAttribute改變的XElement。因爲屬性會像元素一樣添加到元素中。元素扮演不同的角色,形成樹形XML結構。

根元素現在成爲用戶根據您的要求。

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

如果您想重複添加子元素,請使用下面的代碼塊單獨或循環。

xml.Add(
新的XElement( 「用戶」, 新的XElement( 「用戶ID」, 「陽光充足」), 新的XElement( 「密碼」, 「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"); 
+0

如何添加用戶作爲根元素。請再次看看編輯的問題 – 2013-04-04 11:14:58

+0

@RajeevKumar答案已被編輯。請檢查 – Smaug 2013-04-04 11:32:02

0

如果您想要的值顯示爲元素,那麼你應該使用XElement代替XAttribute ...

例如

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

要添加這些元素下的根用途:

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

給出這方面的嘗試,

var users= new XElement("Users"); 

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

    users.Add(userXml);