XML в структуру данных - PullRequest
       3

XML в структуру данных

4 голосов
/ 03 сентября 2010

У меня есть XML-файл, который выглядит следующим образом

<step>
    <id>3</id>
    <backid>1</backid>
    <question>Are you having a good day</question>
    <yesid>4</yesid>
    <noid>5</noid>
       </step>

Он настроен как приложение, которое задает пользователю вопросы «да» и «нет», чтобы помочь пользователю в выполнении сложного бизнес-процесса.Yesid и noid - это идентификаторы следующего шага процесса.В прошлом (и на других языках) я загружал информацию из файла xml в многомерный массив и уходил оттуда.

Однако я пытаюсь использовать linq to xml в этом приложении, и мне интересно, есть ли более эффективный способ сделать это, чем xpath для массива, который я делал в прошлом

1 Ответ

6 голосов
/ 03 сентября 2010

Я хотел бы создать класс, представляющий шаг, прочитать XML-файл в нем, используя LINQ-to-XML, а затем создать словарь шагов для простого поиска:

var doc = XDocument.Load("xmlfile1.xml");

var steps = from step in doc.Root.Elements("step")
            select new Step
                   {
                       Id       = (int)step.Element("id"),
                       BackId   = (int)step.Element("backid"),
                       Question = (string)step.Element("question"),
                       YesId    = (int)step.Element("yesid"),
                       NoId     = (int)step.Element("noid"),
                   };

var dict = steps.ToDictionary(step => step.Id);

var currentStep = dict[3];

while (true)
{
    switch (Ask(currentStep.Question))
    {
        case Yes:  currentStep = dict[currentStep.YesId];  break;
        case No:   currentStep = dict[currentStep.NoId];   break;
        case Back: currentStep = dict[currentStep.BackId]; break;
        default:   return;
    }
}

(Предполагая, что файлсодержит несколько элементов под общим корнем.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...