我正在试图将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中有回车符,所以我无法使用它。 任何帮助将非常感激。谢谢,汤姆
答案 0 :(得分: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();