xml-parsing的通过/失败测试

时间:2011-09-19 15:21:30

标签: c# xml linq-to-xml xml-parsing

所以我有这个代码解析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>

1 个答案:

答案 0 :(得分:0)

你的方法对我来说似乎有点弱,因为用户可能会犯错并写垃圾而不是int,所以你的位置会失败。使用纯xsd方法然后验证单个实体是不是更好?作为个人经验,使用XSD来验证简单的xml,并且每个实体的验证导致易于维护和扩展代码,即使inpuit是机器生成的(因为有时规范会发生变化;))所以我更喜欢旧的fashon方式而不是linq to XML来解决这种情况,但仅仅是我的观点来自我的经验。