2011-10-25 32 views
0

我是很新的XML和XNA,並以閱讀,我是輸出到存儲有許多不同的層如何使用C#從XML文件讀取List <>? (基於XNA問題)

我的XML瓷磚地圖列表,撞上了絆腳石看起來是這樣的(只是一個示例):

<XnaContent xmlns:Maps="TileEditorLibrary.Maps"> 
<Asset Type="Maps:TileMap"> 
    <R> 
     <Item> 
     <C> 
      <Item> 
      <E>1</E> 
      <ID>8</ID> 
      <B>8</B> 
      <H /> 
      <T /> 
      </Item> 
      <Item> 
      <E>1</E> 
      <ID>8</ID> 
      <B>8</B> 
      <H /> 
      <T /> 
      </Item> 
     </C> 
     </Item> 
    </R> 
    </Asset> 
</XnaContent> 

我的代碼讀取它看起來是這樣,但我完了到哪裏它往後走:

public void LoadContent(XDocument doc, TileMap myMap) 
    { 
     XDocument mapDoc = doc; 
     TileMap map = myMap; 

     foreach (XElement element in mapDoc.Element("R").Elements("Item").Elements("C")) 
     { 
      foreach (XElement mapValue in mapDoc.Element("Item").Elements()) 
       { 
        if (mapValue.Name.Equals("E")) 
        { 
        //do something 
        } 
        else if (mapValue.Name.Equals("ID")) 
        { 
        } 
        else if (mapValue.Name.Equals("B")) 
        { 
        } 
        else if (mapValue.Name.Equals("H")) 
        { 
        } 
        else if (mapValue.Name.Equals("T")) 
        { 
        } 
       } 
     } 
    } 

目前我運行應用程序以查看它是否獲得了文檔好吧,並能夠解析信息,但由於缺乏經驗,我用XML拋出一個空對象引用

我道歉,如果這似乎很模糊,但我不知道還有什麼其他的信息可以幫助任何前瞻性顧問

如果有其他任何可能幫助請你,我會試着解釋

非常感謝

巴里

+0

什麼線扔'空對象reference'錯誤? –

回答

1

這可能給你思考的一些食物:

public void LoadContent(XDocument doc, TileMap myMap) 
{ 
    var lookup = new Dictionary<string, Action<string>>() 
    { 
     { "E", v => { Console.WriteLine("E = " + v); } }, 
     { "ID", v => { Console.WriteLine("ID = " + v); } }, 
     { "B", v => { Console.WriteLine("B = " + v); } }, 
     { "H", v => { Console.WriteLine("H = " + v); } }, 
     { "T", v => { Console.WriteLine("T = " + v); } }, 
    }; 

    var actions = 
     from e in doc.Root 
      .Element("Asset") 
      .Element("R") 
      .Elements("Item") 
      .Elements("C") 
     from mv in e 
      .Elements("Item") 
      .Elements() 
     let name = mv.Name.ToString() 
     let value = mv.Value 
     select new Action(() => lookup[name](value)); 

    foreach (var a in actions) 
     a.Invoke(); 
} 
+0

謝謝,希望能得到這個排序現在 – BarryH1987

2

你應該做的是閱讀了關於XML serialization and deserialization
通過這種方式,您可以創建一個表示XML的類,並在沒有任何XML解析的情況下直接反序列化它。

Her e是一個例子如何做到這一點。

+0

非常感謝Sani,會看看這個 – BarryH1987

+0

全部排序感謝幫助球員 – BarryH1987