【问题标题】:How can I load list of child elements from XML?如何从 XML 加载子元素列表?
【发布时间】:2012-11-01 20:54:51
【问题描述】:

我需要在每个查询中列出行项。下面我只得到查询的值,而不是它的 lineitems 列表。

 XElement myElement = XElement.Load("Inquiries.xml");
        var query = from s in myElement.Elements("Inquiry")
                    select new
                    {
                        InquiryId = (int)s.Element("InquiryId"),
                        FirstName = (string)s.Element("FirstName"),
                        LastName = (string)s.Element("LastName"),
                        LineItems = from l in myElement.Elements("Inquiry").Elements("LineItems")
                                   select new
                                   {
                                       Quantity = (int)l.Attribute("quantity"),
                                       PartNumber = (string)l.Attribute("partnumber")
                                   }

                    };

        var result = query.ToList();

XML:

<Inquiries>
  <Inquiry>
    <InquiryId>0</InquiryId>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
    <LineItems>
      <LineItem quantity="2" partnumber="abc"></LineItem>
      <LineItem quantity="3" partnumber="abc"></LineItem>
      <LineItem quantity="6" partnumber="abc"></LineItem>
    </LineItems>
  </Inquiry>
  <Inquiry>
    <InquiryId>1</InquiryId>
    <FirstName>Epic</FirstName>
    <LastName>Beardman</LastName>
    <LineItems>
      <LineItem quantity="2" partnumber="abc"></LineItem>
      <LineItem quantity="3" partnumber="abc"></LineItem>
      <LineItem quantity="6" partnumber="abc"></LineItem>
    </LineItems>
  </Inquiry>
</Inquiries>

【问题讨论】:

    标签: c# xml list xelement


    【解决方案1】:
    XElement myElement = XElement.Load("Inquiries.xml");
    var query = from s in myElement.Elements("Inquiry")
                select new
                {
                    InquiryId = Convert.ToInt32(s.Element("InquiryId").Value),
                    FirstName = s.Element("FirstName").Value,
                    LastName = s.Element("LastName").Value,
                    LineItems = (from l in s.Element("LineItems").Elements("LineItem")
                                select new
                                {
                                    Quantity = Convert.ToInt32(l.Attribute("quantity").Value),
                                    PartNumber = l.Attribute("partnumber").Value
                                }).ToList()
    
                };
    
    var result = query.ToList();
    

    【讨论】:

    • 这行得通,谢谢。我必须研究多元化,因为我对它们感到困惑。
    【解决方案2】:

    这应该可行:

        public void Test()
        {
            var inquiries = XElement.Load("Test.xml").Elements("Inquiry")
                .Select(i => new Inquiry
                            {
                                InquiryId = int.Parse(i.Element("InquiryId").Value),
                                FirstName = i.Element("FirstName").Value,
                                LastName = i.Element("LastName").Value,
                                LineItems = i.Elements("LineItems").Descendants()
                                    .Select(li => new LineItem
                                        {
                                            Quantity = int.Parse(li.Attribute("quantity").Value),
                                            PartNumber = li.Attribute("partnumber").Value
                                        }).ToList()
                            }).ToList();
        }
    }
    
    public class Inquiry
    {
        public int InquiryId { get; set; }
    
        public string FirstName { get; set; }
    
        public string LastName { get; set; }
    
        public List<LineItem> LineItems { get; set; }
    }
    
    public class LineItem
    {
        public int Quantity { get; set; }
    
        public string PartNumber { get; set; }
    }
    

    【讨论】:

    • 但是如何将子元素的属性放入列表中?
    • 您需要哪些属性的列表?
    • 数量和零件号,但我需要它们作为查询列表中的列表。
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2023-03-13
    • 2012-06-14
    • 2020-03-06
    相关资源
    最近更新 更多