2012-07-03 106 views
0

我想使用LINQ在數據庫中插入一些字段。其中一個字段包含XML數據(GPX)。通過LINQ將XML數據插入數據庫時​​出錯

當我運行下面的代碼:

rtlq.GpxData = new XElement(route.GpxData); 

我得到這個異常:

Name cannot begin with the '<' character, hexadecimal value 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> 
+0

它應該是XmlDocument而不是XElement? – JohnnBlade

+0

您可以發佈route.GpxData的值 –

+1

的樣本,它應該加載xml。使用XmlDocument doc = new XmlDocument(); doc.LoadXml(route.GpxData); – ZafarYousafi

回答

2

route.GpxData大概是在XML字符串。接受字符串名稱的構造函數將試圖將其轉換爲表示XML元素的對象。一個XML元素NAME不能包含<個字符,儘管`<'可以在內容中(如果正確轉義)。

+3

確實;在這種情況下,用行'rtlq.GpxData = XElement.Parse(route.GpxData)'替換''應該修復它 –

+0

嘿馬克,我認爲我的問題已經解決了,我沒有看到這個錯誤,但另一個錯誤,我認爲我應該張貼另一個問題,我怎麼能標記你的答案爲答案 – Kabi

+0

我仍然收到此錯誤,但沒有名稱屬性在我的文件中以< –

1

嘗試

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