Question

J'ai ce code XML dans une colonne de mon tableau:

<keywords>
  <keyword name="First Name" value="|FIRSTNAME|" display="Jack" />
  <keyword name="Last Name" value="|LASTNAME|" display="Jones" />
  <keyword name="City" value="|CITY|" display="Anytown" />
  <keyword name="State" value="|STATE|" display="MD" />
</keywords>

J'obtiens un enregistrement de cette table en utilisant LINQ to SQL via ceci:

GeneratedArticle ga = db.GeneratedArticles.Single(p => p.GeneratedArticleId == generatedArticleId);

Cela fonctionne, mon objet GeneratedArticle me convient parfaitement.

J'aimerais parcourir les données du champ ArticleKeywords, qui est XML. J'ai commencé à faire ceci:

var keywords = from k in ga.ArticleKeywords.Elements("Keywords")
                    select k;

            foreach (var keyword in keywords)
            {
             //what goes here?   
            }

Je ne suis pas sûr à 100% d’obtenir ces données correctement. J'ai besoin d'aide avec la syntaxe appropriée pour obtenir la valeur et l'affichage hors de mon champ XML.

Était-ce utile?

La solution

Voici un exemple de code:

Pour lire les mots clés, vous devez appeler Éléments (" mot clé ") et non Éléments (" mots clés " & "; ) puisque les mots-clés sont un nœud racine.

// IEnumerable sequence with keywords data
var keywords = from kw in ga.ArticleKeywords.Elements("keyword")
               select new {
                   Name = (string)kw.Attribute("name"),
                   Value = (string)kw.Attribute("value"),
                   Display = (string)kw.Attribute("display")
               };


foreach (var keyword in keywords)
{
    var kw = "Name: " + keyword.Name + 
             " Value: " + keyword.Value + 
             " Display: " + keyword.Display;
    Console.WriteLine(kw);
}

Vous pouvez obtenir la valeur de l'attribut à l'aide de foo.Attribute ("bar"). Value , mais cette méthode lève une exception si l'attribut est manquant. Le moyen sûr d’obtenir la valeur de l’attribut est (chaîne) foo.Attribute ("barre") - cela vous donnera null si l’attribut est manquant

.

Autres conseils

Encore une fois, je suis étonné que les gens n'essayent même pas leurs réponses et que les gens continuent de voter quand ils ne travaillent pas. Les .Elements obtiendront la liste des éléments à la racine actuelle, ce qui n’est pas un mot clé.

De même, celui qui utilise .Attributes ["X"] ne compile même pas, vous devez utiliser () bien sûr, il fonctionnerait à nouveau sur chaque instance de "mots-clés" " non "mot clé"

Vous pouvez utiliser

var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements()

ou

var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements("keyword")

ou (cela permettra d'obtenir tous les éléments de mots-clés, quel que soit le niveau)

var keywords = from kw in ga.ArticleKeywords.Descendants("keyword")

Je pense que quelque chose comme cela fonctionnerait

var keywordData = from k in ga.ArticleKeywords.Elements("Keywords")
                  select new { Value = k.Attributes["value"].Value,
                               Display = k.Attributes["display"].Value};

Cela vous donnerait un IEnumerable de type anonyme contenant une propriété Value et Display. Selon ce que vous faites, vous pouvez facilement remplacer le type anonyme par un type concret.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top