如何用C#将XML中体重值存入字典并按孩子姓名检索?
实现按孩子姓名检索体重的字典
当然可以实现这个需求!你只需要调整LINQ to XML的查询逻辑,直接构建一个字典,把孩子姓名作为键、体重作为值,这样就能通过姓名快速检索对应的体重了。
完整实现代码
// 加载目标XML文档 var xmlDoc = XDocument.Load(path + @"\Pages\Fams.xml"); // 构建姓名与体重映射的字典 var weightLookup = xmlDoc.Descendants("Child") .ToDictionary( // 键:提取孩子姓名,Trim()去除文本前后的空格 childNode => childNode.Element("ChildName").Value.Trim(), // 值:提取对应体重,同样去除空格 childNode => childNode.Element("Details").Element("Weight").Value.Trim() ); // 使用示例:通过姓名获取体重 string billWeight = weightLookup["Bill"]; // 返回 "78" // 如果需要数值类型,可直接转换 int billWeightNum = int.Parse(weightLookup["Bill"]);
为什么这个方案可行?
你原来的代码只提取了所有Weight元素的值,丢失了每个体重对应的孩子姓名关联。而上面的代码从每个Child节点出发,同时获取该节点下的ChildName和对应的Weight值,通过ToDictionary方法直接建立键值对映射。
因为你提到所有孩子姓名都是唯一的,所以ToDictionary方法不会抛出重复键的异常,完全符合你的场景需求。
可选优化(处理潜在空元素)
如果XML中可能存在缺失ChildName或Weight的节点,可以添加空值检查避免报错:
var safeWeightLookup = xmlDoc.Descendants("Child") .Where(childNode => childNode.Element("ChildName") != null && childNode.Element("Details")?.Element("Weight") != null) .ToDictionary( childNode => childNode.Element("ChildName").Value.Trim(), childNode => childNode.Element("Details").Element("Weight").Value.Trim() );
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

