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

如何检查特定节点属性值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", ""));

        }

但正在努力正确地实施它。


守着星空守着你
浏览 120回答 1
1回答

白猪掌柜的

一种可能的解决方案是通过替换来提取所有ID的数量"abc"://Load the documentXDocument doc = XDocument.Load(@"PATH_TO_FILE.xml");//Extract all ID'svar ids = new List<int>();foreach (var lvl in doc.Root.Elements()){&nbsp; &nbsp; if (int.TryParse(lvl.Attribute("id").Value.Replace("abc", ""), out int id))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; ids.Add(id);&nbsp; &nbsp; }}基于最小值和最大值,可以创建所有预期ID的范围。现在,您可以获取所有缺少的ID://Get the missing ID'sint minId = ids.Min();int maxId = ids.Max();var missingIds = Enumerable.Range(minId, maxId - minId).Except(ids);
打开App,查看更多内容
随时随地看视频慕课网APP