4

我正在尝试按如下方式解析 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”类型。

当我检查节点的值时,我会正确地从位置子节点获取所有元素,但它不想为我分解它。我已经检查了与此类似的错误,但无法弄清楚我做错了什么。有什么建议么?

4

2 回答 2

8

您不需要将元素或属性转换为双精度。只需将它们加倍:

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 支持显式转换运算符

是的,XElement没有实现IConvertable接口,因此你不能将它传递给Convert.ToDouble(object value)方法。您的代码将使用将节点值传递给Convert.ToDouble(string value)方法。像这样:

Lat = Convert.ToDouble(node.Element("lat").Value)

但同样,最好简单地将节点转换为double类型。double?如果您的 xml 中可能缺少属性或元素,则为(可为空)。在这种情况下访问Value属性会引发NullReferenceException.

于 2013-01-19T21:02:47.140 回答
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)
                  };  
于 2013-01-19T21:27:29.043 回答