كيف يمكنني الوصول إلى بيانات XML في بلدي العمود باستخدام LINQ to XML ؟

StackOverflow https://stackoverflow.com/questions/207157

سؤال

لدي هذا XML في عمود في الجدول:

<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>

أنا على الحصول على سجل الخروج من هذا الجدول باستخدام LINQ to SQL عبر هذا:

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

الذي يعمل على GeneratedArticle كائن على ما يرام.

أود أن المشي من خلال البيانات في ArticleKeywords المجال ، وهو XML.بدأت تفعل هذا:

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

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

أنا لست متأكدا 100 ٪ أن أنا على الحصول على تلك البيانات بشكل صحيح.أنا بحاجة إلى مساعدة مع بناء الجملة الصحيح للحصول على قيمة العرض من XML المجال.

هل كانت مفيدة؟

المحلول

هنا هو نموذج التعليمات البرمجية:

قراءة الكلمات علينا الاتصال عناصر("الكلمات الرئيسية") لا عناصر("الكلمات الرئيسية") منذ الكلمات الرئيسية هو عقدة الجذر.

// 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);
}

يمكنك الحصول على قيمة السمة باستخدام فو.السمة("بار").القيمة, ولكن هذه الطريقة سوف رمي استثناء إذا السمة مفقودة.طريقة آمنة للحصول على سمة القيمة (سلسلة)فو.السمة("بار") - أنها سوف تعطيك null إذا السمة مفقودة

نصائح أخرى

مرة أخرى أنا مندهش من أن الناس لا تحاول حتى إجاباتهم و لا يزال الناس حتى التصويت عندما لا تعمل.على .العناصر سوف تحصل على قائمة من العناصر في الجذر ، وهي ليست الكلمة.

أيضا استخدام .سمات["X"] حتى لا ترجمة تحتاج إلى استخدام () وبطبيعة الحال مرة أخرى سيكون التشغيل على سبيل المثال كل من "كلمات" لا "الكلمة"

هل يمكن استخدام

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

أو

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

أو (هذا سوف تحصل على جميع الكلمات الرئيسية العناصر بغض النظر عن مستوى)

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

وأود أن أعتقد أن شيئا مثل هذا العمل

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

وهذا من شأنه أن تعطيك IEnumerable من نوع مجهول تحتوي على قيمة وخاصية العرض. اعتمادا على ما تفعل الخاص بك هل يمكن بسهولة استبدال نوع مجهول مع نوع ملموس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top