我想用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,
};
答案 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();