无法在XML文档中获取完整的用户详细信息

本文关键字:用户 详细信息 获取 XML 文档 | 更新日期: 2023-09-27 18:15:57

首先在这里我向您展示了我的XML文档,然后我想使用c#代码读取这些值,但在这里我收到了一个用户名usr &密码仅限pwd

<Users>
  <user>
    <username>abc</username>
    <password>def</password>
  </user>
  <user>
    <username>usr</username>
    <password>pwd</password>
  </user>
</Users>
Java代码:

 private void Form1_Load(object sender, EventArgs e)
    {
        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(Application.StartupPath+"''load.xml");
        foreach (XmlNode node in xDoc.SelectNodes("//Users/user"))
        {
            string Username = node.FirstChild.InnerText;
            string Password = node.LastChild.InnerText;

          // Some coding goes here
        }
    }

我需要两个用户的详细信息。我的XPath查询有什么问题?

无法在XML文档中获取完整的用户详细信息

因为每次设置UsernamePassword时,您都在创建立即超出范围的新变量(取决于Some coding goes here实际是什么/做什么)。创建一些更高级的作用域变量并将值存储在那里,但即使这样,每次也会覆盖相同的值,因此只会得到最后一个凭据集—因此,使用集合来存储它们。

var credentials = new List<KeyValuePair<string, string>>();
credentials.Add(new KeyValuePair<string, string>(
  node.FirstChild.InnerText, node.LastChild.InnerText)
);

如果你在循环中对查询值做了一些事情,那么我可以纠正,但是不清楚你期望使用这些的地方(例如,重用严格作用域的变量可能是完全有效的,如果是这样的话)。

您可以使用XmlSerializer来提取您的元素。

类:

[XmlRoot("users")]
public class UserResult
{
    [XmlElement("user")]
    public List<User> Users { get; set; }
}
public class User
{
    [XmlElement("username")]
    public string UserName { get; set; }
    [XmlElement("password")]
    public string Password { get; set; }
}

用法:

var xml = @"<users>
<user>
<username>abc</username>
<password>def</password>
</user>
<user>
<username>usr</username>
<password>pwd</password>
</user>
</users>";
var document = new XmlDocument();
document.LoadXml(xml);
UserResult result;
var serializer = new XmlSerializer(typeof(UserResult));
using(var reader = new StringReader(xml))
{
    result = serializer.Deserialize(reader);
}

try

var xDoc= XDocument.Load(Application.StartupPath+"''load.xml");
var userlist = xDoc.Descendants("users").Descendants("user")
            .Select(u => new {
                                Username = u.Element("username").Value,
                                Password = u.Element("password").Value
                            }).ToList();
public List<UserDetails> GetUserDetails()
        {
            XDocument xDOC = XDocument.Load(Application.StartupPath+"''load.xml");
            List<UserDetails> retVal = (from xele in xDOC.Descendants("User")
                                        select new UserDetails
                                        {
                                            UserName = xele.Element("username").Value,
                                            Password = xele.Element("password").Value
                                        }).ToList<UserDetails>();
            return retVal;
        }
    }
    public class UserDetails
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    }