2

私は、このような GPX ファイルを作成しようとしている Delphi の初心者です。

 <?xml version="1.0" encoding="UTF-8" ?> 
- <gpx xmlns="http://www..." version="1.1" creator="EasyGPS 4.18" xmlns:xsi="http://www..." " xsi:schemaLocation="http://www..." >
- <metadata>
  <bounds minlat="19.38975200" minlon="-99.17971000" maxlat="19.39671900" maxlon="-99.17543500" /> 
- <extensions>
  <time xmlns="http://www...">2011-02-20T01:51:38.662Z</time> 
  </extensions>
  </metadata>
- <wpt lat="19.39671900" lon="-99.17820800">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>INDIANAPOLIS</name> 
  <sym>Residence</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." >
  <label_text>INDIANAPOLIS</label_text> 
  </label>
  </extensions>
  </wpt>
- <wpt lat="19.38975200" lon="-99.17543500">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>SUPERAMA</name> 
  <sym>Department Store</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." ">
  <label_text>SUPERAMA</label_text> 
  </label>
  </extensions>
  </wpt>
- <wpt lat="19.39119400" lon="-99.17971000">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>CUMULUS1</name> 
  <sym>Waypoint</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." ">
  <label_text>CUMULUS1</label_text> 
  </label>
  </extensions>
  </wpt>
- <rte>
- <extensions>
  <label xmlns="http://www..." /> 
  </extensions>
- <rtept lat="19.39671900" lon="-99.17820800">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>INDIANAPOLIS</name> 
  <sym>Residence</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." >
  <label_text>INDIANAPOLIS</label_text> 
  </label>
  </extensions>
  </rtept>
- <rtept lat="19.38975200" lon="-99.17543500">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>SUPERAMA</name> 
  <sym>Department Store</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www.topografix.com/GPX/gpx_overlay/0/3">
  <label_text>SUPERAMA</label_text> 
  </label>
  </extensions>
  </rtept>
- <rtept lat="19.39119400" lon="-99.17971000">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>CUMULUS1</name> 
  <sym>Waypoint</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." >
  <label_text>CUMULUS1</label_text> 
  </label>
  </extensions>
  </rtept>
- <rtept lat="19.39671900" lon="-99.17820800">
  <time>2011-02-20T01:44:26.284Z</time> 
  <name>INDIANAPOLIS</name> 
  <sym>Residence</sym> 
- <extensions>
  <time xmlns="http://www..." </time> 
- <label xmlns="http://www..." >
  <label_text>INDIANAPOLIS</label_text> 
  </label>
  </extensions>
  </rtept>
  </rte>
  <extensions /> 
  </gpx>

次のコードがあります

// root
iXml := XmlDoc.DOMDocument;
xmlNode := iXml.appendChild (iXml.createElement ('xml'));

iAttribute := iXml.createAttribute ('version');
iAttribute.nodeValue := '1.0';
xmlNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('encoding');
iAttribute.nodeValue := 'UTF-8';
xmlNode.attributes.setNamedItem (iAttribute);

//GPX
gpxNode := xmlNode.appendChild(iXml.createElement ('gpx'));

iAttribute := iXml.createAttribute ('xmlns');
iAttribute.nodeValue := http://www... ;
gpxNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('version');
iAttribute.nodeValue := '1.1';
gpxNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('creator');
iAttribute.nodeValue := http://www..." ;
gpxNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('xmlns:xsi');
iAttribute.nodeValue := 'http://www.w3.org/2001/XMLSchema-instance';
gpxNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('xsi:schemaLocation');
iAttribute.nodeValue := http://www..." ';
gpxNode.attributes.setNamedItem (iAttribute);

mNode := gpxNode.appendChild(iXml.createElement ('metadata'));

bNode := mNode.appendChild(iXml.createElement ('bounds'));

iAttribute := iXml.createAttribute ('minlat');
iAttribute.nodeValue := '19.38975200';
bNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('minlon');
iAttribute.nodeValue := '-99.17971000';
bNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('maxlat');
iAttribute.nodeValue := '19.39671900';
bNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('maxlon');
iAttribute.nodeValue := '-99.17543500';
bNode.attributes.setNamedItem (iAttribute);



trksegNode := gpxNode.appendChild(iXml.createElement ('wpt'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.39671900';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17820800';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'INDIANAPOLIS';
trksegNode.attributes.setNamedItem (iAttribute);

trksegNode := gpxNode.appendChild(iXml.createElement ('wpt'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.38975200';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17543500';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'SUPERAMA';
trksegNode.attributes.setNamedItem (iAttribute);

trksegNode := gpxNode.appendChild(iXml.createElement ('wpt'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.39119400';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17971000';
trksegNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'CUMULUS1';
trksegNode.attributes.setNamedItem (iAttribute);



trkptNode := gpxNode.appendChild (iXml.createElement ('rte'));

trkNode := trkptNode.appendChild (iXml.createElement ('rtept'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.39671900';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17820800';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'INDIANAPOLIS';
trkNode.attributes.setNamedItem (iAttribute);

trkNode := trkptNode.appendChild (iXml.createElement ('rtept'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.38975200';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17543500';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'SUPERAMA';
trkNode.attributes.setNamedItem (iAttribute);

trkNode := trkptNode.appendChild (iXml.createElement ('rtept'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.39119400';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17971000';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'CUMULUS1';
trkNode.attributes.setNamedItem (iAttribute);

trkNode := trkptNode.appendChild (iXml.createElement ('rtept'));

iAttribute := iXml.createAttribute ('lat');
iAttribute.nodeValue := '19.39671900';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('lon');
iAttribute.nodeValue := '-99.17820800';
trkNode.attributes.setNamedItem (iAttribute);

iAttribute := iXml.createAttribute ('name');
iAttribute.nodeValue := 'INDIANAPOLIS';
trkNode.attributes.setNamedItem (iAttribute);

しかし、GPXファイルを検証しようとすると、「GPXファイルではありません」と検証されません

私の主な問題は、GPXノードを宣言する最初の行にあると思います。私はほとんど絶望的です。どんな助けも本当に感謝しています

コードで取得したファイルは次のとおりです。

<xml version="1.0">
  <gpx xmlns="http://www.." version="1.1" creator="http://www..."  xmlns:xsi="http://www..." " xsi:schemaLocation="htthttp://www..." >
    <metadata xmlns="">
      <bounds minlat="19.38975200" minlon="-99.17971000" maxlat="19.39671900" maxlon="-99.17543500"/>
    </metadata>
    <wpt xmlns="" lat="19.39671900" lon="-99.17820800" name="INDIANAPOLIS"/>
    <wpt xmlns="" lat="19.38975200" lon="-99.17543500" name="SUPERAMA"/>
    <wpt xmlns="" lat="19.39119400" lon="-99.17971000" name="CUMULUS1"/>
    <rte xmlns="">
      <rtept lat="19.39671900" lon="-99.17820800" name="INDIANAPOLIS"/>
      <rtept lat="19.38975200" lon="-99.17543500" name="SUPERAMA"/>
      <rtept lat="19.39119400" lon="-99.17971000" name="CUMULUS1"/>
      <rtept lat="19.39671900" lon="-99.17820800" name="INDIANAPOLIS"/>
    </rte>
  </gpx>
</xml>

よろしくお願いいたします。

4

3 に答える 3

2

GPX Editorがどのように機能するかをご覧ください。これはオープン ソースであり、Delphi アプリケーションです。

lib\ フォルダーには、興味のあるファイルが含まれています。

于 2011-03-04T19:03:17.147 に答える
1

ソース例からわかる限り、XML名前空間属性は

xmlns=""

そこにあってはいけません。

元のファイルのドキュメント要素はxmlns="http://www..."名前空間を使用します。その子要素は、この名前空間を継承します。しかしxmlns=""、Delphi で を追加すると、子要素は異なる(「デフォルト」)ネームスペースを持ちます。これにより、XML が無効になります (XML バリデーターで試すことができます)。

ルート要素に特定の名前空間があることを Delphi DOM に伝える必要があります。

絶対に使用しないでください

iAttribute := iXml.createAttribute ('xmlns');

代わりに、ドキュメントに名前空間を割り当て、追加の名前空間パラメーターを持つ特別な DOM メソッドで要素を追加します。

于 2011-03-04T19:01:20.240 に答える
0

この回答が示唆するように、Delphi XML Data Binding Wizard を使用して Delphi にGPX XSDをインポートしてみてください。

GPX 構造をラップするインターフェースとクラスを持つユニットを生成します。

それからそこから行きます。

于 2011-03-04T22:10:43.007 に答える