如何检查节点属性中的缺失值?
How to check for a missing value in a node attribute?
如何检查特定节点属性值中的 missing/skipped 值
e.x。
<?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", ""));
}
但很难正确实施它..
一种可能的解决方案是通过替换 "abc"
:
来提取所有 ID 的编号
//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);
如何检查特定节点属性值中的 missing/skipped 值 e.x。
<?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", ""));
}
但很难正确实施它..
一种可能的解决方案是通过替换 "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);