2010-11-29 20 views
5

Bu yapı verildiğinde:XML, XML için LINQ kullanırken öğe içerip içermediğini nasıl kontrol edebilirim?

 <root> 
    <user> 
      <userName>user1</userName> 
      <userImageLocation>/user1.png</userImageLocation> 
    </user> 
    <user> 
      <userName>user2</userName> 
    </user> 
</root> 

public class User 
{ 
    public string UserName {get; set; } 
    public string UserImageLocation {get; set; } 
} 

XML dosyasındaki verileri almak için LINQ to XML'i kullanıyorum, örneğin:

XDocument document = XDocument.Parse(xmlFile); 
List<User> listOfUsers = 
(from user in document.Descendants("user") 
select new User { 
    UserName = user.Element("userName"), 
    UserImageLocation = user.Element("userImageLocation"), 
} 
).ToList<User>(); 

Sorunum, tüm kullanıcı öğelerinin bir userImageLocation içermediğidir. userImageLocation'ı okumaya çalışırken, bir istisna atar.

Bir XML öğesinin var olup olmadığını nasıl kontrol edebilirim ve varsa, oku?

cevap

7

Bir dize özelliğine XElement atamaya çalıştığınız için geçerli kodunuz derlenmeyecektir. Tahminimce, bir dizeye dönüştürmek için XElement.Value özelliğini kullanıyorsunuz. Bu nokta gösterimi kullanılarak çok daha okunabilir gereken durumlardan biri olduğunu

XDocument document = XDocument.Parse(xmlFile); 
List<User> listOfUsers = 
(from user in document.Descendants("user") 
select new User { 
    UserName = (string) user.Element("userName"), 
    UserImageLocation = (string) user.Element("userImageLocation"), 
} 
).ToList<User>(); 

Not: Bunun yerine, bir boş XElement referans "açık" dersek boş dönecektir açık dize dönüştürme, kullanın: kodunun altına

XDocument document = XDocument.Parse(xmlFile); 
List<User> listOfUsers = document 
    .Descendants("user") 
    .Select(user => new User { 
     UserName = (string) user.Element("userName"), 
     UserImageLocation = (string) user.Element("userImageLocation") }) 
    .ToList(); 
3

deneyin

UserImageLocation = user.Element("userImageLocation")!=null?user.Element("userImageLocation").Value:string.Empty 
İlgili konular