C# xml解析的通过/失败测试
所以我有了解析xml文件的代码。我需要它做的是检查范围内的值,并写出是否通过/失败。我不确定我的代码:where语句是否正确。我需要代码来查找每个语句的Max和Min,并写出例如XMax,它传递的值小于287,大于failedC# xml解析的通过/失败测试,c#,xml,linq-to-xml,xml-parsing,C#,Xml,Linq To Xml,Xml Parsing,所以我有了解析xml文件的代码。我需要它做的是检查范围内的值,并写出是否通过/失败。我不确定我的代码:where语句是否正确。我需要代码来查找每个语句的Max和Min,并写出例如XMax,它传递的值小于287,大于failed string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*"); foreach (string fileName in fileEntries) {
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>
我觉得你的方法有点弱,因为用户可能会犯错误,写垃圾而不是int,所以你的where会失败。使用纯xsd方法然后验证单个实体不是更好吗?作为个人经验,使用XSD验证简单的xml,并对每个实体进行验证,这使得代码易于维护和扩展,即使输入是机器生成的,因为有时规范会发生变化;因此,我更倾向于使用旧的fashon方法,而不是linq to XML来解决这种情况,但这只是我根据自己的经验得出的意见。是否希望它为每个节点写出通过或失败的结果,或者对于对象作为一个整体?对于每个节点,确定通过失败。xml文件是从机器构建中创建的,因此它将始终是一个整数值。我的代码可能是完全错误的,这可能就是为什么我在这里寻求编写此代码的最佳方法的帮助。@Casey,对我来说,最好的方法是使用XSD验证形状,然后使用基于实体的验证,您可以更轻松地扩展和维护代码。