LinqToXml使用xml文件构造一个类对象

时间:2014-01-22 13:03:44

标签: c# xml linq-to-xml

我想用xml源文件构建一个对象。 我需要获得与特定“SiteName”匹配的“Site”元素。 并使用“Site”元素中的所有元素构建我的对象(LocalisationInfo类)。 谢谢你。

这是xml文件的样子:

<Sites>
   <Site>
      <longitude>1.555</longitude>
      <latitude>4.488003</latitude>
      <SiteName>Aix en Provence</SiteName>
      <FullAdresse>adresse here</FullAdresse>
      <NomResponsable>martin Véronique</NomResponsable>
      <AdressePostale>260 rue Louis de Broglie</AdressePostale>
      <CodePostal>13799</CodePostal>
      <Ville>Aix-En-Provence</Ville>
      <Pays>France</Pays>
   </Site>

   <Site>
   </Site>
   <Site>
   </Site>

这是我的CODE无法正常工作......

  XDocument xdoc = XDocument.Load("Resources/Sites.xml");

            var lesite = from d in xdoc.Descendants("Site")           
                         where d.Element("SiteName").Value == sitelocalisation
                         select new LocalisationInfo
            {
                TelSecouriste = d.Element("TelSecouriste").Value,
                Longitude = d.Element("longitude").Value,
                Latitude = d.Element("latitude").Value,
                Pays = d.Element("Pays").Value,
                CodePostal = d.Element("CodePostal").Value,
                Ville = d.Element("Ville").Value,
                Standard = d.Element("Standard").Value,
                SiteName = d.Element("SiteName").Value,
                AdressePostale = d.Element("AdressePostale").Value,

            };

1 个答案:

答案 0 :(得分:1)

我可以假设您有一些没有Site子元素的SiteName元素,或者匹配网站上缺少其他元素。因此,您正在访问元素的Value属性,如果找不到某个元素,您将收到NullReferenceException。使用强制转换为字符串 - 这将返回null而不是引发异常:

XDocument xdoc = XDocument.Load("Resources/Sites.xml");

var lesite = from s in xdoc.Root.Elements("Site")           
             where (string)s.Element("SiteName") == sitelocalisation
             select new LocalisationInfo {
                TelSecouriste = (string)s.Element("TelSecouriste"),
                Longitude = (string)s.Element("longitude"),
                Latitude = (string)s.Element("latitude"),
                Pays = (string)s.Element("Pays"),
                CodePostal = (string)s.Element("CodePostal"),
                Ville = (string)s.Element("Ville"),
                Standard = (string)s.Element("Standard"),
                SiteName = (string)s.Element("SiteName"),
                AdressePostale = (string)s.Element("AdressePostale"),
            };

请记住,此查询将返回匹配网站的序列。因此,如果您只需要第一个,请使用FirstOrDefault

 var result = lesite.FirstOrDefault();