Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# xml解析的通过/失败测试_C#_Xml_Linq To Xml_Xml Parsing - Fatal编程技术网

C# xml解析的通过/失败测试

C# 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) {

所以我有了解析xml文件的代码。我需要它做的是检查范围内的值,并写出是否通过/失败。我不确定我的代码:where语句是否正确。我需要代码来查找每个语句的Max和Min,并写出例如XMax,它传递的值小于287,大于failed

   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验证形状,然后使用基于实体的验证,您可以更轻松地扩展和维护代码。