2009-03-06 11 views
1

Je lis un fichier XML qui ressemble à ceci:test pour voir si un XElement existe

<?xml version="1.0" encoding="utf-8"?> 
<VehicleList> 
<Vehicle> 
    <Item> 
    <Name>F-150</Name> 
    <Maker>Ford</Maker> 
    <Color>Black</Color> 
    <Price>30000</Price> 
    </Item> 
    <ItemSpecific> 
    <NameValueList> 
    <Name>Mileage</Name> 
    <Value>56000</Value> 
    </NameValueList> 
    <NameValueList> 
    <Name>Year</Name> 
    <Value>2003</Value> 
    </NameValueList> 
    </ItemSpecific> 
</Vehicle> 
<!-- more Vehicle nodes here --> 
</Vehicles> 

Ces données échantillons par notre service à Web eBay donc ne pas me griller sur la structure.

Quoi qu'il en soit, je suis en utilisant le code comme ceci pour lire le xml et placer tous les véhicules dans une liste (du véhicule) objet, comme suit:

Dim vehicles = From v in doc...<Vehicle> _ 
    Let mile = (From x In v.<ItemSpecific>.<NameValueList> Where x.<Name>.Value = "Mileage" Select x.<Value>.Value).Single _ 
        Let year = (From z In v.<ItemSpecific>.<NameValueList> Where z.<Name>.Value = "Year" Select z.<Value>.Value).Single _ 
        Select New Vehicle With {.Name = v.<Item>.<Name>.Value, .Maker = v.<Item>.<Maker>.Value, .Color = v.<Item>.<Color>.Value, .Mileage = mile, .Year = year} 

Le résultat List(Of Vehicle) est alors lié à un ASP. NET ListView contrôle où les données sont rendues. Tout va bien si tous les nœuds souhaités sont présents. Par exemple, le noeud Kilométrage est conditionnel et est parfois absent. Chaque fois que le nœud n'est pas présent, j'obtiens une erreur "Sequence contains no elements".

J'ai tout essayé je sais que cela fonctionne correctement. Existe-t-il un moyen de tester si un XElement existe?

Répondre

2

Cela dépend de ce que vous voulez faire quand le nœud est pas là. Par exemple, si Nothing est acceptable, vous pouvez passer de .Single à .SingleOrDefault. Ce dernier retournera Nothing dans le cas d'une séquence vide et ne lèvera pas d'exception.

Dim vehicles = From v in doc...<Vehicle> _ 
       Let mile = (From x In v.<ItemSpecific>.<NameValueList> Where x.<Name>.Value = "Mileage" Select x.<Value>.Value).SingleOrDefault _ 
       Let year = (From z In v.<ItemSpecific>.<NameValueList> Where z.<Name>.Value = "Year" Select z.<Value>.Value).SingleOrDefault _ 
       Select New Vehicle With {.Name = v.<Item>.<Name>.Value, .Maker = v.<Item>.<Maker>.Value, .Color = v.<Item>.<Color>.Value, .Mileage = mile, .Year = year} 
+0

Whoa! C'était rapide. Et ça fonctionne comme un champion. Je te le dis, si j'avais tes mains, je couperais le mien! Merci! :-) –

+0

@Dude, http://upload.wikimedia.org/wikipedia/en/thumb/a/aa/Futurama_ep72.jpg/200px-Futurama_ep72.jpg – JaredPar

+0

lol! Laisse-le à Fry pour me battre dessus! À votre santé! –

Questions connexes