当前位置: 代码迷 >> .NET Framework >> linq to xml 的有关问题 重新发帖 还是没解决,望大家帮自己看看
  详细解决方案

linq to xml 的有关问题 重新发帖 还是没解决,望大家帮自己看看

热度:57   发布时间:2016-05-02 00:28:45.0
linq to xml 的问题 重新发帖 还是没解决,望大家帮自己看看
XML code
[code=C#]

<main>
  <texte>Accès refusé</texte>
  <errcode>2</errcode>
  <url></url>
</main>
[/code]

上面就是个例子,是拒绝访问。

C# code
XDocument xmlsociete = XDocument.Parse(DataXML);            var societe = from str in xmlsociete.Descendants("main")                          select new Societe()                          {                              nosiret = str.Element("no").Value,                              deno = str.Element("deno").Value,                              adresse = str.Element("adresse").Value,                              codepostal = str.Element("codepostal").Value,                              commune = str.Element("commune").Value,                              struri = str.Element("url").Value,                              lstdirig=new List<Dirigeant>(),                              lstevenement=new List<Evenement>(),                          };

上面是我的linq的代码部分,如果那个xml中还有这个str.Element("no").Value等等,当然可以生成societe,而且我可以得到xml的数据,但现在如果像上面那段xml,我是得不到societe的,这样我使用下面的代码就会出错
C# code
Societe soc=societe.ToArray<Societe>()[0];


所以我想在这条代码前加一个判断,判断var societe中存不存在Societe的实体,我试过societe==null,试过societe.count()==0,但都不好使都会出现一个错误La référence d'objet n'est pas définie à une instance d'un objet.,我的vs是法语版的,翻译过来应该是,这个reference没有定义一个societe的实体,所以请大家帮看看如何判断。

------解决方案--------------------
楼主你的错误在这里 nosiret = str.Element("no").Value,
str.Element("no") 已经是null了,str.Element("no").Value 自然会抛出异常。
你需要考虑到XML不包含no节点的时候,怎么初始你的Societe类,比如象下面这样

C# code
var societe = from str in xmlsociete.Descendants("main")                select new Societe()                {                                               nosiret = str.Element("no") == null ? "" : str.Element("no").Value,                };
  相关解决方案