【问题标题】:How to get strongly-typed collection from XML using Linq如何使用 Linq 从 XML 获取强类型集合
【发布时间】:2013-05-20 12:23:11
【问题描述】:

这是我的 XML 文件中的一个 sn-p(我意识到它的格式并不理想,但很遗憾我无法更改它):

<PRODMENUS>
<MENU id="90168" shortname="BrdSumPV13" mealname="Dinner" mealid="7" servedate="20130102">Summer PREV 2013</MENU>
<MENU id="90153" shortname="BrdSumPV13" mealname="Breakfast" mealid="46" servedate="20130102">Summer PREV 2013</MENU>
<MENU id="90162" shortname="BrdSumPV13" mealname="Lunch" mealid="6" servedate="20130102">Summer PREV 2013</MENU>
</PRODMENUS>

以下函数有效,但它只抓取第一个菜单元素,而不抓取其余的

public static List<Menu> GetLocations(string uri)
{
    XDocument xmlDoc = XDocument.Load(uri);
    var menus = from menu in xmlDoc.Elements("PRODMENUS")
                          select new Menu
                          {
                              Id = Convert.ToInt32(menu.Element("MENU").Attribute("id").Value),
                              ShortName = menu.Element("MENU").Attribute("shortname").Value,
                              MealName = menu.Element("MENU").Attribute("mealname").Value,
                              MealId = Convert.ToInt32(menu.Element("MENU").Attribute("mealid").Value)
                          };

    return menus.ToList();
}

如何使用上述 XML 文件获取 3 个 Menu 对象的集合?

【问题讨论】:

    标签: c# asp.net xml linq


    【解决方案1】:

    你想更深一层并做xmlDoc.Elements("PRODMENUS").Elements("MENU")

    var menus = from menu in xmlDoc.Elements("PRODMENUS").Elements("MENU")
                select new Menu
                {
                    Id = Convert.ToInt32(menu.Attribute("id").Value),
                    ShortName = menu.Attribute("shortname").Value,
                    MealName = menu.Attribute("mealname").Value,
                    MealId = Convert.ToInt32(menu.Attribute("mealid").Value)
                };
    

    【讨论】:

      【解决方案2】:

      你们很亲密

      XDocument xmlDoc = XDocument.Load(uri);
      var menus = from menu in xmlDoc.Descendants("MENU")
                  select new Menu
                  {
                      Id = Convert.ToInt32(menu.Attribute("id").Value),
                      ShortName = menu.Attribute("shortname").Value,
                      MealName = menu.Attribute("mealname").Value,
                      MealId = Convert.ToInt32(menu.Attribute("mealid").Value)
                  };
      
      return menus.ToList();
      

      您还可以使用一些快捷方式,例如 Id = (int)menu.Attribute("id") 而不是 Id = Convert.ToInt32(menu.Attribute("id").Value)

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 2021-05-31
        • 2011-04-04
        • 2012-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多