无法在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查询有什么问题?
因为每次设置Username
和Password
时,您都在创建立即超出范围的新变量(取决于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; }
}