Привет, я пишу приложение для медицинского исследования они будут вводить пол, возраст и некоторые другие значения, которые будут вычислены для ResultValue
теперь у меня есть XML-файл, который содержит некоторую информацию о результате в сочетании возраста, пола и значений результатов, и я хотел бы распечатать описание TestResult (в случае, если к какой группе принадлежит пробанд) Следует отметить, что мне приходится иметь дело с диапазонами значений, это означает, что фактическое значение находится между нижней и высокой частью ... У меня три группы ... Хорошо, это мой файл XML
<?xml version = "1.0" encoding = "iso-8859-1"?>
<Result>
<ID>1</ID>
<Description>You belong to Group 1</Description>
<Genders>
<Gender type = "female">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "0" high = "19"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "0" high = "20"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "0" high = "21"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "0" high = "22"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "0" high = "23"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "0" high = "24"/>
</Age>
</Ages>
</Gender>
<Gender type = "male">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "0" high = "19"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "0" high = "20"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "0" high = "21"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "0" high = "22"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "0" high = "23"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "0" high = "24"/>
</Age>
</Ages>
</Gender>
</Genders>
</Result>
<Result>
<ID>2</ID>
<Description>You belong to Group 2</Description>
<Genders>
<Gender type = "female">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "19" high = "24"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "20" high = "25"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "21" high = "26"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "22" high = "27"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "23" high = "28"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "24" high = "29"/>
</Age>
</Ages>
</Gender>
<Gender type = "male">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "19" high = "24"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "20" high = "25"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "21" high = "26"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "22" high = "27"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "23" high = "28"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "24" high = "29"/>
</Age>
</Ages>
</Gender>
</Genders>
</Result>
<Result>
<ID>3</ID>
<Description>You belong to group 3</Description>
<Genders>
<Gender type = "female">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "24" high = "29"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "25" high = "30"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "26" high = "31"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "27" high = "32"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "28" high = "33"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "29" high = "34"/>
</Age>
</Ages>
</Gender>
<Gender type = "male">
<Ages>
<Age low = "18" high = "24">
<ResultValue low = "24" high = "29"/>
</Age>
<Age low = "25" high = "34">
<ResultValue low = "25" high = "30"/>
</Age>
<Age low = "35" high = "44">
<ResultValue low = "26" high = "31"/>
</Age>
<Age low = "45" high = "54">
<ResultValue low = "27" high = "32"/>
</Age>
<Age low = "55" high = "64">
<ResultValue low = "28" high = "33"/>
</Age>
<Age low = "65" high = "110">
<ResultValue low = "29" high = "34"/>
</Age>
</Ages>
</Gender>
</Genders>
</Result>
Как бы выглядел мой запрос linq to xml, если бы у меня
пол = "женский"
возраст = 29
ResultValue = 17
этот пробанд, безусловно, принадлежит к Группе 1, и я хотел бы распечатать соответствующее Описание ...
Но я бью головой, чтобы это заработало ...
Ищу решение на C# ... Любая помощь была бы замечательной !!!
Ой, простите! Я ищу решение C# ...





Что-то вроде этого?
XElement myElement = XElement.Parse(xmlstring);
int resultValue = 17;
int age = 26;
string genderValue = "female";
IEnumerable<string> query =
myElement.Descendants("ResultValue")
.Where(rv => ((int)rv.Attribute("low")) <= resultValue)
.Where(rv => ((int)rv.Attribute("high")) >= resultValue)
.Where(rv => rv.Ancestors("Age")
.Any(a => ((int) a.Attribute("low")) <= age && ((int) a.Attribute("high")) >= age)
)
.Where(rv => ((string)rv.Ancestors("Gender").Single().Attribute("type")) == genderValue)
.Select(rv => rv.Ancestors("Result").Single().Element("Description").Value);
foreach (string x in query)
Console.WriteLine(x);
Идея состоит в том, что вы можете представить форму строки-столбца, где каждая строка является ResultValue. Каждое значение результата имеет единственного родителя Age, единственного родителя Gender и единственного родителя Result.
ResultValue.Low ResultValue.High Возраст: низкий Возраст: высокий Пол.Тип Результат. Описание
Фактически, можно спроецировать приведенный выше xml в такую форму:
var query2 = myElement.Descendants("ResultValue")
.Select(rv => new
{
ResultValue = rv,
Age = rv.Ancestors("Age"),
Gender = rv.Ancestors("Gender"),
Result = rv.Ancestors("Result")
})
.Select(x => new XElement("Data",
new XAttribute("ResultValue.Low", (int)x.ResultValue.Attribute("low")),
new XAttribute("ResultValue.High", (int)x.ResultValue.Attribute("high")),
new XAttribute("Age.Low", (int)x.Age.Attributes("low").Single()),
new XAttribute("Age.High", (int)x.Age.Attributes("high").Single()),
new XAttribute("Gender.Type", (string) x.Gender.Attributes("type").Single()),
new XAttribute("Result.Description", (string) x.Result.Elements("Description").Single())
));
foreach (XElement x in query2)
Console.WriteLine(x);
Вы ищете VB.Net LINQ to XML-запрос или C#. Очень разные ответы.