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