为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查节点属性中的缺失值?

如何检查节点属性中的缺失值?

C#
守着星空守着你 2021-05-10 16:38:40
如何检查特定节点属性值ex中的缺失/跳过值<?xml version="1.0"?><root>    <lvl id="abc1">1036</lvl>    <lvl id="abc2">0036</lvl>    <lvl id="abc3">3.<dc>04</dc></lvl>    <lvl id="abc5">87.<dc>03</dc></lvl>    <lvl id="abc6">996</lvl>    <lvl id="abc10">203</lvl></root>在上面的xml中,缺少id属性值abc4,abc7,abc8和abc9。.如何检查这些并使用linq to xml获取这些值,以便我可以写日志文件或说这些值丢失了,检查文件?我在考虑使用像这样的辅助方法public  static Boolean CompareNext(this XElement xe)        {            return Convert.ToInt16(xe.Attribute("id").Value.Replace("abc", ""))+1== Convert.ToInt16(xe.ElementsAfterSelf().FirstOrDefault().Attribute("rid").Value.Replace("ref", ""));        }但正在努力正确地实施它。
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

一种可能的解决方案是通过替换来提取所有ID的数量"abc":


//Load the document

XDocument doc = XDocument.Load(@"PATH_TO_FILE.xml");


//Extract all ID's

var ids = new List<int>();

foreach (var lvl in doc.Root.Elements())

{

    if (int.TryParse(lvl.Attribute("id").Value.Replace("abc", ""), out int id))

    {

        ids.Add(id);

    }

}

基于最小值和最大值,可以创建所有预期ID的范围。现在,您可以获取所有缺少的ID:


//Get the missing ID's

int minId = ids.Min();

int maxId = ids.Max();

var missingIds = Enumerable.Range(minId, maxId - minId).Except(ids);


查看完整回答
反对 回复 2021-05-21
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信