2012-03-07 41 views
0

我有一个XML文件:解析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 retruns IEumerable<BaseEvent>,但我想,这将是BaseEvent。我怎样才能做到这一点?

回答

2

只需使用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 
} 
1

添加.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()