LINQ和XML ...需要帮助调试这个

时间:2009-12-09 05:37:42

标签: asp.net xml linq

所以我的天才前任决定在应用程序的数据库中包含一个'xml_data'列。我现在必须使用此xml中存储的一些信息用于另一个应用程序。我正在做一个普通的查询来从数据库中获取xml,并且我正在尝试使用LINQ从XML中提取我需要的数据。这是一些示例XML:

<?xml version="1.0"?>
<data>
  <field>
    <name normalized="id_num"></name>
    <value>
      <![CDATA[12345]]>
    </value>
  </field>
  <field>
    <name normalized="blah"></name>
    <value>
      <![CDATA[asdfasdf]]>
    </value>
  </field>
 ...
</data>

由于每一行都有自己的XML文档,遵循这种模式,我正在迭代SQL结果并试图从XML中提取我需要的值,如下所示:

List<String> collection = new List<String>();
while (sqlreader.Read())
{
    XElement response = XElement.Parse(sqlreader["xml_data"].ToString());
    var name = from field in response.Elements("field")
               where (string)field.Element("name").Attribute("normalized") == "id_num"
               select field.Element("value").Value;
    collection.Add(name.ToString());
}

我知道这是不对的,因为我不断追回而不是我需要的价值:

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]

P.S。请保持温和,我是一名Python程序员,并不熟悉C#或.NET。

1 个答案:

答案 0 :(得分:2)

您需要name.FirstOrDefault()或name.First()而不是name.ToString()。如果找不到名为'id_num'的字段,前者会给你null,后者会抛出异常。

你的LINQ查询返回一个集合(虽然在你的情况下,假设是普通数据,它将是一个项目集合。)