正在分析xml.返回一个对象而不是集合

本文关键字:集合 一个对象 返回 xml | 更新日期: 2023-09-27 18:26:57

我有一个xml文件:

  <Result>Ok</Result>
  <Error></Error>
  <Remark></Remark>
  <Data>
    <Movies>
      <Movie ID='2'>
        <Name><![CDATA[TestName]]></Name>
        <Duration Duration='170'>2h 50min</Duration>            
        <Properties>
          <Property Name='11'><![CDATA[1111110]]></Property>
        </Properties>
        <Rental from_date='' to_date=''>
          <SessionCount></SessionCount>
          <PU_NUMBER></PU_NUMBER>
        </Rental>
      </Movie>
    </Movies>
  </Data>
</XML>

pasring xml文件的代码:

var results = from element in XDocument.Parse(queryResponse).Descendants("Movie")
                          select new BaseEvent
                          {
                              OID = (int)element.Attribute("ID"),
                              Subject = (string)element.Element("Name"),
                              Duration = (int)element.Element("Duration").Attribute("Duration")
                          };

问题是Descedants重新运行IEumerable<BaseEvent>,但我希望这将是BaseEvent。我该怎么做?

正在分析xml.返回一个对象而不是集合

只需使用First()Last()Single()FirstOrDefault()

就我个人而言,我最初会这样做,而不是在查询中完成所有操作:

var element = XDocument.Parse(queryResponse)
                       .Descendants("Movie")
                       .FirstOrDefault();
if (element == null)
{
    // Handle the case of no movies
}
else
{
    var baseEvent = new BaseEvent
                    {
                        OID = (int) element.Attribute("ID"),
                        Subject = (string) element.Element("Name"),
                        Duration = (int) element.Element("Duration")
                                                .Attribute("Duration")
                    };
    // Use baseEvent
}

添加.First()以获得第一个元素:

from element in XDocument.Parse(queryResponse).Descendants("Movie")
                          select new BaseEvent
                          {
                              OID = (int)element.Attribute("ID"),
                              Subject = (string)element.Element("Name"),
                              Duration = (int)element.Element("Duration").Attribute("Duration")
                          }.First();

您也可以使用FirstOrDefault()(如果没有这样的节点)、Last()Single()