首先,我向您展示我的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查询有什么问题?
答案 0 :(得分:1)
因为每次设置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)
);
如果您正在使用循环中查询的值进行操作,那么我可以立即纠正,但不清楚 您希望使用这些(例如重复使用)如果是这种情况,那么 - 变量可能是完全有效的。)
答案 1 :(得分:1)
尝试
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();
答案 2 :(得分:1)
您可以使用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);
}
答案 3 :(得分:0)
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; }
}