所以我有这个代码解析xml文件。我需要做的是检查范围内的值,如果通过/失败则写出。我不确定我的代码:“where”语句是否正确。我需要代码来查找每个语句的“Max”和“Min”,并写出例如XMax,它的值小于287,并且大于失败。
string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*");
foreach (string fileName in fileEntries)
{
var query = from file in fileEntries
let doc = XDocument.Load(file)
let x = doc.Descendants("XAxisCalib").Single()
where (int)x.Attribute("Max") > 287
where (int)x.Attribute("Min") < -50
let y = doc.Descendants("YAxisCalib").Single()
where (int)y.Attribute("Max") > 645
where (int)y.Attribute("Min") > -87
let z = doc.Descendants("ZAxisCalib").Single()
where (int)z.Attribute("Max") > 20
where (int)z.Attribute("Min") > -130
select new
{
XMax = x.Element("Max").Value,
XMin = x.Element("Min").Value,
YMax = y.Element("Max").Value,
YMin = y.Element("Min").Value,
ZMax = z.Element("Max").Value,
ZMin = z.Element("Min").Value
};
以下是一个xml文件的示例:
<XAxisCalib>
<Max>281.68</Max>
<Min>-46.79</Min>
</XAxisCalib>
<YAxisCalib>
<Max>570.57</Max>
<Min>-123.24</Min>
</YAxisCalib>
<ZAxisCalib>
<Max>31.01</Max>
<Min>-100.95</Min>
答案 0 :(得分:0)
你的方法对我来说似乎有点弱,因为用户可能会犯错并写垃圾而不是int,所以你的位置会失败。使用纯xsd方法然后验证单个实体是不是更好?作为个人经验,使用XSD来验证简单的xml,并且每个实体的验证导致易于维护和扩展代码,即使inpuit是机器生成的(因为有时规范会发生变化;))所以我更喜欢旧的fashon方式而不是linq to XML来解决这种情况,但仅仅是我的观点来自我的经验。