11

kml xml Google Earth ファイルをアプリケーションにインポートしようとしていますが、必要なことを行うために xDocument 構文を正しく取得できないようです。 kml xml ファイル。

xml インポートの基本は理解していますが、xDocument と Linq で何も動作しません。理想的には、各 Placemark をオブジェクトとして取得し、Entity Framework 駆動のデータベースに追加したいと考えています。私はLinqを使い始めたばかりで、いくつかのポインターでできるので、これをどのように行うべきかについての提案は素晴らしいでしょう。xmlは次のようにレイアウトされています

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
  <Document>
    <Placemark>
      <name>XXX</name>
      <description>XXX</description>
      <styleUrl>XXX</styleUrl>
      <Point>
         <coordinates>XXX</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>XXX</name>
      <description>XXX</description>
      <styleUrl>XXX</styleUrl>
      <Point>
         <coordinates>XXX</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>
4

5 に答える 5

8

コードを含めていませんが、参照するときに名前空間を含めるのを忘れたと思います。これが例です。

基本的なアクセス:

var placemarks = xdoc.Element("kml").Element("Document").Elements("Placemark");

名前空間の使用:

var ns = XNamespace.Get("http://earth.google.com/kml/2.2");
var placemarks = xdoc.Element(ns + "kml").Element(ns + "Document").Elements(ns + "Placemark");
于 2012-10-08T19:34:09.547 に答える
7

私の推測では、LINQtoXMLクエリで名前空間を使用するのを忘れていると思います。これからデータを抽出するのは簡単です。

XNamespace ns = "http://earth.google.com/kml/2.2";
var doc = XDocument.Load("file.xml");
var query = doc.Root
               .Element(ns + "Document")
               .Elements(ns + "Placemark")
               .Select(x => new PlaceMark // I assume you've already got this
                       {
                           Name = x.Element(ns + "name").Value,
                           Description = x.Element(ns + "description").Value,
                           // etc
                       });

それでも問題が解決しない場合は、試したことと失敗したことの完全な例を投稿してください。

于 2012-10-08T19:33:59.380 に答える
3
var xDoc = XDocument.Load("a.xml");
XNamespace ns = "http://earth.google.com/kml/2.2";

var placemarks = xDoc.Descendants(ns+"Placemark")
                    .Select(p => new
                    {
                        Name = p.Element(ns+"name").Value,
                        Desc = p.Element(ns+"description").Value
                    })
                    .ToList();
于 2012-10-08T19:36:40.000 に答える