XmlNode没有属性

时间:2013-11-27 19:52:22

标签: c# asp.net

伙计我正在使用此代码获取XmlNode

public XmlNode CheckUserWithPassword(String username, String password) {
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load(xmlPath);
    XmlNode node = xmlDocument.SelectSingleNode(String.Format("Users/User[username='{0}' and password='{1}']", username, password));
    return node;
}

现在我得到的节点就在这里..

    XmlNode user = users.CheckUserWithPassword(Session["username"].ToString(),oldpassword.Text);
    if (user != null) {
        user.Attributes["password"].Value = newpassword.Text;

现在这是在访问属性时给我一个null,我尝试了很多方法。但每当我尝试按键或索引访问属性时,它都会为null。 我试过打印这个节点的outerXml。甚至只是显示没有标签的值.. 我的其余功能工作正常,它返回正确的节点,但它没有属性!在这帮我 谢谢。 哦,这是我的垃圾数据XML

<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<name>Ibrahim</name>
<email>hdh@gmail.com</email>
<address>
</address>
<username>ok</username>
<password>ok</password>
</User>
<User>
<name>Aha</name>
<email>jhdhdd@gmail.com</email>
<address>EME DHA SECTOR</address>
<username>ok2</username>
<password>whatever</password>
</User>
<User>
<name>demo</name>
<email>demo@demo.com</email>
<address>sajdjahd</address>
<username>demo</username>
<password>demo</password>
</User>
<User>
<name>hello</name>
<email>hello@okd.com</email>
<address>
</address>
<username>pl</username>
<password>pl</password>
</User>
</Users>

1 个答案:

答案 0 :(得分:1)

usernamepassword元素,而非属性。再次使用SelectSingleNode获取password元素。

if (user != null)
{
    var passwordElement = user.SelectSingleNode("password") as XmlElement;
    if (passwordElement != null)
        passwordElement.InnerText = newpassword.Text;
}

您还可以使用具有不同XPath的单个SelectSingleNode来缩短整个算法。

var xpath = String.Format("Users/User[username='{0}' and password='{1}']/password", username, password);
var passwordElement = xmlDocument.SelectSingleNode(xpath) as XmlElement;
if (passwordElement != null)
    passwordElement.InnerText = newpassword.Text;