0
我從www.openstreetmap.org下載了一些XML數據。我現在希望爲這個應用程序創建一個數據轉換器。我已經做了大量的研究,並且使用位於XDocument類中的Load方法有一些工作原型。XML> LINQ查詢>樹視圖
目前代碼:
// Load the XML document
var xmlDocument = XDocument.Load(@"C:\demo.xml");
// Query the data and write out a subset of contacts
var xmlDocumentQuery = from c in xmlDocument.Root.Descendants("way")
select c.Element("tag").Attribute("k");
int indexVariable = 1;
foreach (string name in xmlDocumentQuery)
{
Console.WriteLine(indexVariable + " " + name);
indexVariable = indexVariable + 1;
}
示例XML數據:
<OSM>
<way id="123610420" visible="true" version="1" changeset="8864750" timestamp="2011-07-29T16:26:39Z" user="BillHall" uid="13013">
<nd ref="1377763151"/>
<nd ref="1377763152"/>
<nd ref="1377763156"/>
<nd ref="1377763165"/>
<nd ref="1377763192"/>
<nd ref="1376440397"/>
<nd ref="1377763200"/>
<nd ref="1377763151"/>
<tag k="landuse" v="grass"/>
</way>
<way id="123610421" visible="true" version="3" changeset="8890869" timestamp="2011-08-01T13:30:49Z" user="BillHall" uid="13013">
<nd ref="1377763173"/>
<nd ref="1377763217"/>
<nd ref="1377763170"/>
<nd ref="1377763137"/>
<nd ref="1378432544"/>
<nd ref="1377763154"/>
<nd ref="1378432543"/>
<nd ref="1377763147"/>
<nd ref="1376440420"/>
<nd ref="1376440265"/>
<nd ref="1378432542"/>
<nd ref="1376440320"/>
<nd ref="1376440262"/>
<nd ref="1377763143"/>
<nd ref="1377763195"/>
<nd ref="1381760571"/>
<nd ref="1381760570"/>
<nd ref="1377763219"/>
<nd ref="1377763173"/>
<tag k="landuse" v="grass"/>
</way>
<way id="123610422" visible="true" version="2" changeset="8869626" timestamp="2011-07-30T07:53:36Z" user="BillHall" uid="13013">
<nd ref="1377763145"/>
<nd ref="1377763129"/>
<nd ref="1377763149"/>
<nd ref="1377763204"/>
<nd ref="1376440568"/>
<nd ref="1376440571"/>
<nd ref="1377763153"/>
<nd ref="1378432539"/>
<nd ref="1377763145"/>
<tag k="landuse" v="grass"/>
</way>
</OSM>
然而,我的原型是目前唯一能夠選擇一個給定的元素的單個屬性值。然後循環這些值並輸出它們。我現在想通過保留XML文檔的層次結構並將其轉換爲「樹視圖」來進一步擴展我的原型。
我打算使用TreeNode的類來實現此功能。但我不確定如何維護XML文檔的層次結構。
示例層次:
<WAY ID = 「#」>
<ND>
<ND REF= 「#」>
…
</ND>
<K = 「#」>
<V = 「#」>
</WAY>
…