【问题标题】:Using Linq for XDocument Element value使用 Linq 获取 XDocument 元素值
【发布时间】:2020-01-07 09:08:11
【问题描述】:

我在一个 XML 示例中有以下内容:

<custreply>
   <customer cid="1234">
     <ack id="6000" error="false">
       <info>
          <custgroup>A</custgroup>
          <message>cust created</message>
       </info>
       <info>
          <custgroup>A</custgroup>
          <message>cust setup created</message>
       </info>
     </ack>
   </customer>
   <customer cid="5678">
     <ack id="7000" error="true">
       <error>
          <class>B</class>
          <message>over the limit</message>
       </error>
     </ack>
   </customer>
</custreply>

然后我有 XDocument 和 Linq,它们适用于以下两个值,我需要 ack id 和 ack error:

XDocument CustResponse = XDocument.Load('path');

var custAck = from c in CustResponse.Root.DescendantsAndSelf("ack")
                                   select new { CustId = c.Attribute("id").Value, Error = c.Attribute("error").Value
                                   };

我还需要选择一个 ErrorMessage,如果 error="true" 为“message”元素值,则对于上述 XML 中显示的错误。我怎么能得到那个?如果可能的话,我也会接收错误错误消息,如果可能更容易的话,只是第一个信息中的第一个消息元素,但我主要需要结果中的错误元素消息,并不真正需要错误错误的消息。

谢谢大家

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    尝试以下:

                XDocument CustResponse = XDocument.Load(FILENAME);
    
                var custAck = CustResponse.Root.DescendantsAndSelf("ack")
                    .Select(c => new { 
                        CustId = (string)c.Attribute("id"), 
                        Error = (string)c.Attribute("error"),
                        messages = c.Descendants("message").Select(x => (string)x).ToList()
    
                }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2012-06-15
      相关资源
      最近更新 更多