Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ to XML访问专栏中的XML数据?_C#_Xml_Linq To Sql_Linq To Xml - Fatal编程技术网

C# 如何使用LINQ to 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

我的表中有一列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>
这就行了,我得到了生成的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(“关键字”)-不会返回关键字