2014-06-22 73 views
0

我正拉着我的頭髮試圖將XML文件讀取到二維數組中。我真的不知道爲什麼錯誤出現。事實上,我還沒有完成陣列部分。 XML文件看起來像這樣:將xml文件加載到多維數組中

<?xml version="1.0" encoding="UTF-8"?> 

-<TERMINAL_MESSAGE_FILE> 
    -<MESSAGE> 
     <LABEL>LABEL1</LABEL> 
     <MSG>MESSAGE1</MSG> 
    </MESSAGE> 
    -<MESSAGE> 
     <LABEL>LABEL2</LABEL> 
     <MSG>MESSAGE2</MSG> 
    </MESSAGE> 
</TERMINAL_MESSAGE_FILE> 

所有元素值的來自陣列,messageArray [2]。由於我對XML很陌生,所以我不可能創建這個權利。

現在我從文件對話框控件中獲取文件名。這裏是我使用的代碼:「未設置爲一個對象的實例對象引用」

class message 
    { 
     public string _label{ get; set; } 
     public string _message{ get; set; } 
    } 

public partial class messageForm : Form 
{ 
    InitializeComponent(); 
} 

private loadBTN_Click(object sender, EventArgs e) 
{ 
    DialogResult result = openMsgFD.ShowDialog(); 

    if (result == DialogResult.OK) 
    { 
     XDocument doc = XDocument.Load(openMsgFD.FileName); 

     var settingsList = (from element in doc.Root.Elements("MESSAGE") 
          select new message 
          { 
           _label = element.Attribute("LABEL").Value, 
           _message= element.Attribute("MESSAGE").Value 

          }).ToList(); 

    // will need to deal with putting this into the array but I haven't got that far yet. 
    } 
} 

所以我得到的錯誤是 事情是我從許多例子中複製了這段代碼,我已經看到和稍微有點不同,但我總是得到這個錯誤。我嘗試過使用streamReader和streamWriter,但是MESSGAE.VALUE中有回車符,所以我無法使它工作。 任何幫助將不勝感激。謝謝,湯姆

+1

LABEL和味精是孩子*元素*,而不是* MESSAGE元素的屬性*。 –

+0

出於好奇,爲什麼多維數組?爲什麼不從LINQ中收集對象('List ')?如果標籤是唯一的,則可以使用標籤作爲鍵和消息作爲值的詞典。 – Tim

回答

1

正如我在評論中暗示的,LABEL和MSG是元素,而不是屬性。

首先,我將重新定義消息如下 - 中慣用的C#類和屬性PascalCased:

public class Message 
{ 
    public string Label { get; set; } 
    public string Msg { get; set; } 
} 

那麼這個XLINQ應該工作:

var settingsList = (from element in doc.Root.Elements("MESSAGE") 
        select new Message 
        { 
         Label = (string)element.Element("LABEL"), 
         Msg = (string)element.Element("MSG") 

        }).ToList();