C# 通过LINQ将XML数据插入数据库时出错

C# 通过LINQ将XML数据插入数据库时出错,c#,.net,xml,database,linq,C#,.net,Xml,Database,Linq,我想使用LINQ在数据库中插入一些字段。其中一个字段包含XML数据(GPX) 当我运行以下代码时: rtlq.GpxData = new XElement(route.GpxData); 我得到一个例外: 名称不能以路由开头。GpxData可能是XML中的字符串。接受字符串名称的XElement构造函数将试图将其转换为表示XML元素的对象。XML元素名称不能包含路由。GpxData可能是XML中的字符串。接受字符串名称的XElement构造函数将试图将其转换为表示XML元素的对象。XML元素

我想使用LINQ在数据库中插入一些字段。其中一个字段包含XML数据(GPX)

当我运行以下代码时:

 rtlq.GpxData = new XElement(route.GpxData);
我得到一个例外:


名称不能以路由开头。GpxData可能是XML中的字符串。接受字符串名称的
XElement
构造函数将试图将其转换为表示XML元素的对象。XML元素名称不能包含
路由。GpxData
可能是XML中的字符串。接受字符串名称的
XElement
构造函数将试图将其转换为表示XML元素的对象。XML元素名称不能包含
Try

rtlq.GpxData=XElement.Parse(route.GpxData)

试试看


rtlq.GpxData=XElement.Parse(route.GpxData)

它应该是XmlDocument而不是XElement吗?您能发布route.GpxData的值的示例吗?它应该加载xml。使用XmlDocument doc=新的XmlDocument();doc.LoadXml(route.GpxData);如果您仍然想使用XElement,那么请记住,您使用的构造函数重载需要元素名称,而我认为您希望提供的数据不是名称,因此请使用重载新XElement(名称,route.GpxData),这是因为rtlq.GpxData是XElement类型,而doc是XmlDocument类型。在这种情况下,正如Marc所建议的那样,使用XElement.Parse。它应该是XmlDocument而不是XElement吗?您可以发布route.GpxData的值的示例,并且它应该加载xml。使用XmlDocument doc=新的XmlDocument();doc.LoadXml(route.GpxData);如果您仍然想使用XElement,那么请记住,您使用的构造函数重载需要元素名称,而我认为您希望提供的数据不是名称,因此请使用重载新XElement(名称,route.GpxData),这是因为rtlq.GpxData是XElement类型,而doc是XmlDocument类型。在这种情况下,正如Marc所建议的那样,确实要使用XElement.Parse;在这种情况下,替换为行
rtlq.GpxData=XElement.Parse(route.GpxData)
应该修复它们Marc,我想我的问题已经解决了,我没有看到这个错误,但看到了另一个错误,我想我应该发布另一个问题,我如何才能将你的答案标记为答案我仍然收到这个错误,但我的文件中没有名称属性开始;在这种情况下,替换为行
rtlq.GpxData=XElement.Parse(route.GpxData)应该修复它们Marc,我想我的问题已经解决了,我没有看到这个错误,但看到了另一个错误,我想我应该发布另一个问题,如何将你的答案标记为答案我仍然收到这个错误,但我的文件中没有名称属性
public int Save(Route route)
{
    aspnetdbDataContext aspdb = new aspnetdbDataContext();
    RouteLinq rtlq=new RouteLinq();
    rtlq.UserId = route.UserId;
    rtlq.SourceName = route.Name;

    //I have an error here
    rtlq.GpxData = new XElement(route.GpxData);
    rtlq.CreationTime = route.Time;
    aspdb.RouteLinqs.InsertOnSubmit(rtlq);
    aspdb.SubmitChanges();

    int k1;
    System.Data.Linq.ChangeSet cs1 = aspdb.GetChangeSet();
    k1=cs1.Inserts.Count();

    TrackPointlinq trlq = new TrackPointlinq();
    foreach (var trackpoint in route.TrackPoints)
    {
        trlq.RouteFK=route.Id;
        trlq.TrackTime=trackpoint.Time;
        trlq.Latitude=(float) trackpoint.Latitude;
        trlq.Longitude=(float)trackpoint.Longitude;
        trlq.Elevation=trackpoint.Elevation;
    }

    aspdb.TrackPointlinqs.InsertOnSubmit(trlq);
    aspdb.SubmitChanges();

    int k2;
    System.Data.Linq.ChangeSet cs2 = aspdb.GetChangeSet();
    k2 = cs2.Inserts.Count();

    if ((k1 == 0) && (k2 == 0))
    {
        return 1;
    }
    else
        return 0;
}
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpsies="http://www.gpsies.com/GPX/1/0" creator="GPSies http://www.gpsies.com - GpsiesTrack" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.gpsies.com/GPX/1/0 http://www.gpsies.com/gpsies.xsd">
  <metadata>
    <name>GpsiesTrack</name>
    <link href="http://www.gpsies.com/">
      <text>GpsiesTrack on GPSies.com</text>
    </link>
    <time>2012-06-26T18:58:39Z</time>
  </metadata>
  <trk>
    <name>GpsiesTrack on GPSies.com</name>
    <trkseg>
      <trkpt lat="50.81482934" lon="12.90653228">
        <ele>305.00000</ele>
        <time>2012-05-01T00:00:00Z</time>
      </trkpt>
      <trkpt lat="50.85364209" lon="12.92404174">
        <ele>297.00000</ele>
        <time>2012-05-01T00:15:27Z</time>
      </trkpt>
    </trkseg>
  </trk>
</gpx>