我正在尝试解析XML文档,如下所示:
var locs = from node in doc.Descendants("locations")
select new
{
ID = (double)Convert.ToDouble(node.Attribute("id")),
File = (string)node.Element("file"),
Location = (string)node.Element("location"),
Postcode = (string)node.Element("postCode"),
Lat = (double)Convert.ToDouble(node.Element("lat")),
Lng = (double)Convert.ToDouble(node.Element("lng"))
};
我收到了错误:
无法将“System.Xml.Linq.XElement”类型的对象强制转换为类型 'System.IConvertible'。
当我检查节点的值时,我正确地从子位置获取所有元素,但它不想为我分解它。我检查过类似的错误,但无法弄清楚我做错了什么。有什么建议吗?
答案 0 :(得分:6)
您无需将元素或属性转换为double。简单地将它们加倍:
var locs = from node in doc.Descendants("locations")
select new
{
ID = (double)node.Attribute("id"),
File = (string)node.Element("file"),
Location = (string)node.Element("location"),
Postcode = (string)node.Element("postCode"),
Lat = (double)node.Element("lat"),
Lng = (double)node.Element("lng")
};
Linq to Xml支持显式cast operators。
是的,XElement
没有实现IConvertable
接口,因此您无法将其传递给Convert.ToDouble(object value)
方法。您的代码将使用将节点值传递给Convert.ToDouble(string value)
方法。像这样:
Lat = Convert.ToDouble(node.Element("lat").Value)
但同样,最好只将节点转换为double
类型。或者double?
(可空)如果您的xml中可能缺少属性或元素。在这种情况下访问Value
属性将引发NullReferenceException
。
答案 1 :(得分:1)
您是否只是错过了.Value
属性
var locs = from node in doc.Descendants("locations")
select new
{
ID = Convert.ToDouble(node.Attribute("id").Value),
File = node.Element("file").Value,
Location = node.Element("location").Value,
Postcode = node.Element("postCode").Value,
Lat = Convert.ToDouble(node.Element("lat").Value),
Lng = Convert.ToDouble(node.Element("lng").Value)
};