XML新手,我无法弄清楚如何根据连接到它的另一个XML属性更改我选择的XML属性,因此例如XML文件的结构如下:
<userinfo>
<id username="tommy" password="supersecret" email="email@gmail.com" question="Favourite colour" answer="blue"></id>
<id username="bobby" password="password123" email="derp@gmail.com" question="Pet name" answer="sally"></id>
<id username="scotty" password="encrypted" email="herp@gmail.com" question="Favourite colour" answer="blue"></id>
</userinfo>
我需要根据用户名更改密码值。所以例如,我有用户名“tommy”,我想将tommy的密码更改为我拥有的变量。
我尝试了以下内容,但似乎什么都不做,没有任何错误:
protected void changePassword(string username, string password)
{
//xmlFile is the XDocument xml file path
var query = from c in xmlFile.Descendants("id")
.Where(id => (string)id.Attribute("username") == username)
select c;
foreach (XElement id in query)
{
id.Attribute("password").Value = password;
}
xmlFile.Save(@"xml\filepath\doc.xml");
}
这是基于我所看到的,虽然我没有看到如何使用“where”来做到这一点所以“var query”... bit是有意义的在我脑海里工作。
这在asp.net中使用,并从按钮调用:
protected void btnContinue_Click(object sender, EventArgs e)
{
var change = Log.GetUserInfoForgot(username, txtNewPassword.Text);
}
在这里,我听起来像一个菜鸟,但它不会让我只是调用方法,并将它分配给var,即使它没有返回任何东西。这可能也是一个问题。
答案 0 :(得分:1)
对不起我声名远不能发表评论并要求澄清,所以我提交这个作为答案。
您的更改密码方法有效。我在您的问题中无法分辨的是Log.GetUserInfoForgot(...)
方法调用和changePassword
调用之间的相关性。在GetUserInfoForgot中调用changePassword的地方是什么?
答案 1 :(得分:0)
您是否考虑过放弃LINQ查询?
foreach(var el in xmlDoc.Descendents("id").Where(x => x.Attribute("username").Value == name)
{
el.Attribute("Password").Value = password;
}