【发布时间】:2012-07-03 07:08:04
【问题描述】:
我想使用 LINQ 在数据库中插入一些字段。其中一个字段包含 XML 数据 (GPX)。
当我运行以下代码时:
rtlq.GpxData = new XElement(route.GpxData);
我得到了这个例外:
名称不能以
'<'字符开头,十六进制值0x3C
我想说route.GpxData 有一个字符串类型,我将此类型转换为xml。
这是我的全部代码:
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 文件示例:
<?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>
【问题讨论】:
-
应该是 XmlDocument 而不是 XElement ?
-
你能发布一个 route.GpxData 值的样本
-
它应该加载 xml。使用 XmlDocument doc = new XmlDocument(); doc.LoadXml(route.GpxData);
-
如果您仍想使用 XElement,请记住您使用的构造函数重载需要元素名称,而我认为您想提供数据而不是名称,因此请使用重载 new XElement(name,route.GpxData)
-
这是因为 rtlq.GpxData 是 XElement 类型,而 doc 是 XmlDocument 类型。在这种情况下,正如 Marc 建议的那样,使用 XElement.Parse。