كيف يمكنني الوصول إلى بيانات XML في بلدي العمود باستخدام LINQ to XML ؟
-
03-07-2019 - |
سؤال
لدي هذا 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 من نوع مجهول تحتوي على قيمة وخاصية العرض. اعتمادا على ما تفعل الخاص بك هل يمكن بسهولة استبدال نوع مجهول مع نوع ملموس.