代码之家  ›  专栏  ›  技术社区  ›  Anthony

XML到数据结构

  •  4
  • Anthony  · 技术社区  · 16 年前

    我有一个像这样的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是流程下一步的ID号。在过去(以及其他语言中),我会将XML文件中的信息加载到多维数组中,然后从中删除。

    然而,我试图在这个应用程序中使用linq-to-xml,我想知道是否有一种比我过去所做的xpath-to-array更有效的方法来实现这一点。

    1 回复  |  直到 16 年前
        1
  •  6
  •   dtb    16 年前

    我将创建一个表示步骤的类,使用linq to xml将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;
        }
    }
    

    (假设文件在一个公共根目录下包含多个<step>元素。)