我在表格的一栏中有这个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字段。
答案 0 :(得分:3)
我再次感到惊讶的是,人们甚至没有尝试他们的答案,人们在他们不工作时仍然投票。 .Elements将获取当前根目录中的元素列表,而不是关键字。
使用.Attributes [“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")
答案 1 :(得分:2)
以下是示例代码:
要阅读关键字,我们需要调用元素(“关键字”)而非元素(“关键字”)因为关键字是根节点。
// 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);
}
您可以使用 foo.Attribute(“bar”)获取属性值。值,但如果缺少属性,此方法将抛出异常。获取属性值的安全方法是(string)foo.Attribute(“bar”) - 如果缺少属性,它将为您提供 null
答案 2 :(得分:0)
我认为这样的事情会起作用
var keywordData = from k in ga.ArticleKeywords.Elements("Keywords")
select new { Value = k.Attributes["value"].Value,
Display = k.Attributes["display"].Value};
这将为您提供包含Value和Display属性的IEnumerable匿名类型。根据您的操作,您可以轻松地使用具体类型替换匿名类型。