確かに、私はすでに同様の質問をしましたが、これは異なり、試してみました。
Linq を使用して XML データを読み取ろうとして、この問題を解決しましたが、複数の値を選択して辞書に保存する必要があります。私は試しました(コメントは私の試みです)が、それを理解できず、次のようなエラーが発生します。
System.NullReferenceException: オブジェクト参照が dsdsdsds.MainClass+c__AnonStorey0.<>m__0 (System.Xml.Linq.XElement datanum) [0x00000] のオブジェクトのインスタンスに設定されていません /Users/p/Projects/dsdsdsds/dsdsdsds/Main .cs:23
XML ファイルが次のようになっているとします。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>My word place</name>
<Placemark>
<name>Main Building</name>
<id>1</id>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
ここで取得する必要があるのは、「名前」と「ID」であり、これらの値を辞書に入れます。
これが私のコードです:
var xdoc = XDocument.Load ("buildings.kml");
XNamespace kml = "http://www.opengis.net/kml/2.2";
var dict = xdoc.Descendants(kml + "Placemark").ToDictionary (
datanum => datanum.Attribute(kml + "name").Value,
datanum => datanum.Attribute(kml + "id").Value );
/*.ToDictionary(e => e.Element("name").Value,
e => e.Descendants("id")
.Select (item => new Building
{
BuildingName = (string) e.Element(kml + "name").Value,
BuildingID = Convert.ToInt16(item.Element(kml + "id").Value)
}).ToList()
);
/*
/*var buildings = xdoc.Descendants (kml + "Placemark")
.Select((element, index) => new Building {
BuildingName = (string) element.Element(kml + "name"),
BuildingID = (int) element.Element(kml + "id")
});
*/
注: これを 3 回試みましたが、同じまたは類似のエラー メッセージが表示されます。