【问题标题】:XDocument Descendants of DescendantsXDocument 后代的后代
【发布时间】:2011-03-01 04:34:32
【问题描述】:
<Tickets>
<Extract_Date>2011-02-25 00:00:00</Extract_Date>
<Incidents>
  <Ticket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Ticket_Number>INC000000578057</Ticket_Number>
    <Status>
      <Value>Cancelled</Value>
    <Reason>Cancelled by user</Reason>
  </Status>
</Ticket>

我可以通过以下方式获得ticket_number:

var q1 = from c in xmlDoc.Descendants("Ticket")
                   select new
                   {
                       Ticket_Number = (string)c.Element("Ticket_Number"),
                   };

如何获得理性?

【问题讨论】:

    标签: c# .net linq linq-to-xml


    【解决方案1】:

    这应该可行:

    var q1 = from c in xmlDoc.Descendants("Ticket")
        select new
        {
            Ticket_Number = (string)c.Element("Ticket_Number"),
            Reason = (string)c.Element("Status").Element("Reason")
        };
    

    【讨论】:

      【解决方案2】:
      //if you have exactly one <Ticket> with exactly one <Reason>
      string strReason = xmlDoc.Descendants("Ticket").Single()
          .Descendants("Reason").Single().Value;
      
      //if you have one or multiple <Ticket> elements, 
      //each with exactly one <Reason> element
      string[] astrReasons = xmlDoc.Descendants("Ticket")
          .Select(ticket => ticket.Descendants("Reason").Single().Value).ToArray();
      
      //if you have one or multiple <Ticket> elements, 
      //each with one or multiple <Reason> elements
      string[] astrReasons2 = xmlDoc.Descendants("Ticket")
          .SelectMany(ticket => ticket.Descendants("Reason")
          .Select(reason => reason.Value)).ToArray();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 2012-01-14
        • 1970-01-01
        • 2015-04-08
        相关资源
        最近更新 更多