Разбор XML-файла - PullRequest
       25

Разбор XML-файла

0 голосов
/ 19 сентября 2011

Как я могу добавить / изменить свой код, чтобы один раз, если он извлекал значения max / min, он сравнивал извлеченное значение с заданным значением и записывал pass / fail.Например: xmax извлекает, и это 280, и у меня есть условие в моем коде, говорящее, что xmax должен быть меньше чем 275, таким образом, ошибка записи.Это должно быть сделано для каждого макс / мин. Любые идеи ...?Я использовал linq to xml для анализа, но лучше ли это?

var query = from file in fileEntries
                        let doc = XDocument.Load(file)
                        let x = doc.Descendants("XAxisCalib").Single()
                        let y = doc.Descendants("YAxisCalib").Single()
                        let z = doc.Descendants("ZAxisCalib").Single()
                        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
                        };

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

Как то так может быть?

var results = from item in query
              select new 
              {
                   XMaxResult = item.XMax < 275 ? "pass" : "fail",
                   ...
              };
0 голосов
/ 19 сентября 2011

Вы можете создать метод расширения, чтобы проверить значение

public static class Test {
static int check(this XElement element)
{
    if(element.Value < 100 || element.Value > 275)
    {
        throw new Exception();
    }

    return element.Value;
}
}

Тогда вы можете сделать

select new 
{
    XMax = x.Element("Max").Check(),
    XMin = x.Element("Min").Check(),
    YMax = y.Element("Max").Check(),
    YMin = y.Element("Min").Check(),
    ZMax = z.Element("Max").Check(),
    ZMin = z.Element("Min").Check()
};
0 голосов
/ 19 сентября 2011

Я бы использовал для этого схему XML.

Это позволит вам построить ваш C #, так что потребуется всего несколько строк кода для проверки документа на предмет структурной и семантической правильности.Это также то, что вы можете опубликовать отдельно от вашего приложения, чтобы пользователи могли понять, как документы должны быть оформлены.Некоторые редакторы XML также поддерживают схемы, поэтому они могут получить некоторую автоматическую синтаксическую поддержку / проверку в своем редакторе.

Вот как можно проверить максимальное значение в схеме XSD:

http://www.w3schools.com/schema/schema_facets.asp

...

<xs:element name="Max">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <!-- Must be less than 275 -->
      <xs:maxInclusive value="274"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

...
...