0

LINQを使用してデータベースにいくつかのフィールドを挿入したいと思います。これらのフィールドの1つには、XMLデータ(GPX)が含まれています。

次のコードを実行すると:

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

この例外が発生します:

名前を文字で始めることはできません'<'、16進値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>
4

2 に答える 2

2

route.GpxDataおそらくXMLの文字列です。文字列名を受け入れるコンストラクターはXElement、文字列名をXML要素を表すオブジェクトに変換しようとします。XML要素NAMEに<文字を含めることはできませんが、 `<'はコンテンツ内に含めることができます(適切にエスケープされている場合)。

于 2012-07-03T07:14:25.233 に答える
1

試す

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

于 2012-07-03T07:40:10.840 に答える