【发布时间】:2015-08-23 00:13:44
【问题描述】:
我有一个要加载的 XML 文件。我想在我的代码中添加一个条件来检查并确保根节点是“TimeLog”。如果不是,则告诉用户他们选择了错误的 XML 文件。
在下面的代码中,r.Name 只返回一个空字符串。我希望它返回“TimeLog”,但事实并非如此。
private void loadFromFile(object sender, EventArgs e)
{
if(File.Exists("TimeLog.xml"))
{
XmlReader r = XmlReader.Create("TimeLog.xml");
r.MoveToContent();
r.ReadStartElement();
if (r.Name == "TimeLog") //The current value or r.name is "".
{
while (r.Read())
{
if (r.NodeType == XmlNodeType.Element)
{
r.ReadToDescendant("EntryName");
String name = r.ReadInnerXml();
r.ReadToFollowing("StartDateTime");
String start = r.ReadInnerXml();
r.ReadToFollowing("EndDateTime");
String end = r.ReadInnerXml();
r.ReadToFollowing("Duration");
String dur = r.ReadInnerXml();
entries.Add(new Entry(name, start, end, dur));
}
}
}
else
{
MessageBox.Show("This is not a TimeLog XML file", "This is not a TimeLog XML file", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
r.Close();
}
}
XML 文件是我的 saveToFile() 函数的输出,如下所示
<?xml version="1.0" encoding="utf-8"?>
<TimeLog>
<Entry>
<EntryName>Entry 01</EntryName>
<StartDateTime>8/21/2015 8:50:40 PM</StartDateTime>
<EndDateTime>1/1/0001 12:00:00 AM</EndDateTime>
<Duration>00:00:00</Duration>
</Entry>
<Entry>
<EntryName>Entry 02</EntryName>
<StartDateTime>8/21/2015 8:50:40 PM</StartDateTime>
<EndDateTime>1/1/0001 12:00:00 AM</EndDateTime>
<Duration>00:00:00</Duration>
</Entry>
</TimeLog>
如何检查以确保根节点的名称是“TimeLog”,而无需调用另一个 .Read() 函数并取消 while 语句中代码的顺序?
【问题讨论】: