所以我的天才前任决定在应用程序的数据库中包含一个'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。
答案 0 :(得分:2)
您需要name.FirstOrDefault()或name.First()而不是name.ToString()。如果找不到名为'id_num'的字段,前者会给你null,后者会抛出异常。
你的LINQ查询返回一个集合(虽然在你的情况下,假设是普通数据,它将是一个项目集合。)