编辑基于与其分组的另一个属性选择的XML属性

时间:2015-02-12 20:34:12

标签: c# asp.net .net xml

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,即使它没有返回任何东西。这可能也是一个问题。

2 个答案:

答案 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;
}