C# 如何使用LINQ to XML访问专栏中的XML数据?
我的表中有一列XML:C# 如何使用LINQ to XML访问专栏中的XML数据?,c#,xml,linq-to-sql,linq-to-xml,C#,Xml,Linq To Sql,Linq To Xml,我的表中有一列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" /> <keywo
<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>
这就行了,我得到了生成的Article对象
我想浏览ArticleKeywords字段中的数据,即XML。我开始这样做:
var keywords = from k in ga.ArticleKeywords.Elements("Keywords")
select k;
foreach (var keyword in keywords)
{
//what goes here?
}
我不能100%确定我得到的数据是否正确。我需要有关正确语法的帮助,以便从XML字段中获取值并显示出来。我认为类似的方法可以奏效
var keywordData = from k in ga.ArticleKeywords.Elements("Keywords")
select new { Value = k.Attributes["value"].Value,
Display = k.Attributes["display"].Value};
这将为您提供一个匿名类型的IEnumerable,其中包含一个值和一个Display属性。根据您所做的工作,您可以轻松地将匿名类型替换为具体类型。我认为类似的方法会奏效
var keywordData = from k in ga.ArticleKeywords.Elements("Keywords")
select new { Value = k.Attributes["value"].Value,
Display = k.Attributes["display"].Value};
这将为您提供一个匿名类型的IEnumerable,其中包含一个值和一个Display属性。根据您的操作,您可以轻松地将匿名类型替换为具体类型。以下是示例代码:
要读取关键字,我们需要调用元素(关键字),而不是元素(关键字),因为关键字是根节点
// 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”).value获取属性值,但如果缺少属性,此方法将引发异常。获取属性值的安全方法是(string)foo.attribute(“bar”)-如果缺少属性,它将为您提供null
要读取关键字,我们需要调用元素(关键字),而不是元素(关键字),因为关键字是根节点
// 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”).value获取属性值,但如果缺少属性,此方法将引发异常。获取属性值的安全方法是(string)foo.attribute(“bar”)-如果属性丢失,它将为您提供null值再一次,我感到惊讶的是,人们甚至不尝试自己的答案,而当他们不工作时,人们仍然投票。 .Elements将获取当前根目录下的元素列表,该列表不是关键字 另外,使用.Attributes[“X”]的那一个甚至不编译,您需要再次使用()当然,它将在“关键字”而不是“关键字”的每个实例上操作 你可以用
var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements()
或
或者(这将获得所有关键字元素,而不考虑级别)
我再一次感到惊讶的是,人们甚至不去尝试他们的答案,而当他们不工作的时候,人们仍然在投票。 .Elements将获取当前根目录下的元素列表,该列表不是关键字 另外,使用.Attributes[“X”]的那一个甚至不编译,您需要再次使用()当然,它将在“关键字”而不是“关键字”的每个实例上操作 你可以用
var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements()
或
或者(这将获得所有关键字元素,而不考虑级别)
k、 属性[“某物”]不会编译。ArticleKeywords.Elements(“关键字”)-不会返回关键字。属性[“某物”]不会编译。ArticleKeywords.Elements(“关键字”)-不会返回关键字