2009-07-16 8 views
0

Je fais probablement quelque chose stupide, mais vraiment je ne peux pas obtenir ce travail:Recherche XDocument simple LINQ

var xmlQuery = from i in doc.Descendants("Item") 
    select new TriggerItem() 
    { 
    CreatedDate = DateTime.Now, 
    ItemIdentifier = i.Attribute("itemCode").Value, 
    Name = i.Attribute("name").Value, 
    ProductIdentifier = (i.Attribute("productCode") != null) ? i.Attribute("productCode").Value : null 
    }; 

doc est un objet XDocument, qui, une fois mise au point, je peux le confirmer a chargé le code XML suivant :

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Items xmlns="http://mywebsite"> 
<Item itemCode="12345" productCode="" name="testing" categoryId=""> 
</Item> 
</Items> 

si xmlQuery.Count() shud retour 1, comme un élément dans Ther, mais il revient sans cesse 0!

iv a également essayé:

xmlQuery = from i in doc.Descendants("Items") 

et

xmlQuery = from i in doc.Descendants("Item") 

Même sans créer un nouvel objet TriggerItem, il ne retournera rien ... des idées ?? : '(

Répondre

1

Je sais XML, donc je peux vous dire que l'élément d'objet est dans l'espace de noms « http://activepromotion.net/Data/TriggerItems/1.0 », mais vous cherchez dans l'espace de noms par défaut

Je ne sais pas LINQ à. XML assez bien pour vous dire comment faire, cependant.

+0

Merci beaucoup, je l'ai enlevé les xmlns attrbute et cela a fonctionné, où Est-ce que ce xmlns va vraiment? Ou est-ce qu'il doit même être là? Tout ce que je veux faire dans ce xml est de le dire re it le XSD est placé et gardez-le unique –

+0

La page http://tempuri.org/ donne une bonne explication de ce qu'est un espace de noms XML et fournit des liens vers plus d'informations. Ne soyez pas rebutés par le fait que la page parle de services Web. –

+0

Merci beaucoup encore! –

7

vous devez spécifier l'espace de noms, quelque chose comme ....

XNamespace ns = XNamespace.Get("yourURI"); 
var qry = from i in doc.Descendants(ns + "Items").... 
+1

Souhaite que je pourrais upvote ceci quelques fois de plus! – lazo

+0

Vous êtes une bouée de sauvetage :-) – DilbertDave