2012-07-03 2 views
0

LINQ를 사용하여 데이터베이스의 일부 필드를 삽입하려고합니다. 이 필드 중 하나에는 XML 데이터 (GPX)가 들어 있습니다. 나는 다음과 같은 코드를 실행하면LINQ를 통해 데이터베이스에 XML 데이터를 삽입하는 중 오류가 발생했습니다.

: 나는이 route.GpxData이 유형의 문자열을 가지고 있는데 XML로이 유형을 변환의 말씀을 전합니다

Name cannot begin with the '<' character, hexadecimal value 0x3C

:

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

을 나는이 예외를 얻을.

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

XElement 대신 XmlDocument 여야합니까? – JohnnBlade

+0

route.GpxData의 값인 –

+1

을 게시하여 xml을로드해야합니다. XmlDocument 사용하여 doc = new XmlDocument(); doc.LoadXml (route.GpxData); – ZafarYousafi

답변

2

route.GpxData 아마도 XML의 문자열입니다. 문자열 이름을 사용하는 XElement 생성자는 XML 요소를 나타내는 객체로 변환하려고 시도합니다. NAME의 XML 요소에는 <자를 포함 할 수 없지만 '<'은 콘텐츠 내에 포함될 수 있습니다 (올바르게 이스케이프 된 경우).

+3

실제로; 이 경우, 'rtlq.GpxData = XElement.Parse (route.GpxData); 행으로 대체하십시오. 고쳐야합니다. –

+0

안녕하세요. 마크, 내 문제가 해결되었다고 생각합니다.이 오류는 표시되지 않지만 다른 오류는 표시됩니다. 다른 질문을 게시해야한다고 생각합니다. 대답을 대답으로 표시하려면 어떻게해야합니까? – Kabi

+0

여전히이 오류가 발생하지만 파일의 이름 속성은 < –

1

rtlq.GpxData = XElement.Parse (route.GpxData)을 시도;

관련 문제