如何檢查特定節(jié)點屬性值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);
}
}
基于最小值和最大值,可以創(chuàng)建所有預期ID的范圍。現在,您可以獲取所有缺少的ID:
//Get the missing ID's
int minId = ids.Min();
int maxId = ids.Max();
var missingIds = Enumerable.Range(minId, maxId - minId).Except(ids);
- 1 回答
- 0 關注
- 168 瀏覽
添加回答
舉報
0/150
提交
取消