0
我有以下XML结构:XMLReader不能读取文件
<event id="0" start_time="2014-05-21 10:00:00" duration="86340">
<short_event_descriptor lang="alb" name="Programet e Kanalit A1">Programe/Emisione</short_event_descriptor>
<extended_event_descriptor lang="alb">
<text>Programet dhe Emisionet e perditshme te kanalit A1</text>
</extended_event_descriptor>
</event>
<event id="1" start_time="2014-05-22 10:00:00" duration="86340">
<short_event_descriptor lang="alb" name="Programs of Channel A1">Programs/TalkShows</short_event_descriptor>
<extended_event_descriptor lang="alb">
<text />
</extended_event_descriptor>
</event>
和代码我正在尝试以下内容:
try
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an element.
if (reader.Name == "channel")
{
while (reader.MoveToNextAttribute())
{
if (reader.Name == "name")
{
// epg = new epg2();
epg.channelname = reader.Value;
epg.number = Convert.ToInt32(channelNames[i][1]);
xmlfile.Add(epg);
}
}
}
if (reader.Name == "event")
{
while (reader.MoveToNextAttribute())
{
if (reader.Name == "start_time")
{
// Ev = new Event();
Ev.starttime = Convert.ToDateTime(reader.Value);
}
else if (reader.Name == "duration")
{
Ev.duration = Convert.ToInt32(reader.Value);
}
else if (reader.Name == "name")
{
Ev.duration = Convert.ToInt32(reader.Value);
}
}
}
if (reader.Name == "short_event_descriptor")
{
while (reader.MoveToNextAttribute())
{
if (reader.Name == "name")
{
Ev.name = reader.Value;
}
}
}
break;
case XmlNodeType.Text: //Display the text in each element.
if (shenjuar > 0)
{
try
{
Ev.shortDescription = reader.Value.Replace("\r\n", "").Replace("\r", "").Replace("\n", "").Replace("Sub. Ang", "").Replace("Sub. Alb", "").Replace('\"', '\''); ;
}
catch
{
Ev.shortDescription = reader.Value;
}
shenjuar *= -1;
}
else if (shenjuar < 0)
{
try
{
Ev.longDescription = reader.Value.Replace("\r\n", "").Replace("\r", "").Replace("\n", "").Replace("Sub. Ang", "").Replace("Sub. Alb", "").Replace('\"', '\''); ;
}
catch
{
Ev.longDescription = reader.Value;
}
shenjuar *= -1;
epg.EventNumber.Add(Ev);
}
else reader.Skip();
break;
case XmlNodeType.EndElement: //Display the end of the element
reader.Skip();
break;
}
}
xmlfile.Add(epg);
}
catch (FileNotFoundException fnfe)
{
TextBox1.Text = "Error. Can not find " + CName + ".xml file";
//return;
}
catch (Exception exc)
{
TextBox1.Text = "Unknown Error: \r\nError on " + CName + ".xml file \r\n Error Description:" + exc.Message;
//return;
}
}
的一点是,这段代码被用于XML文件的列表,而问题是,一些文件的标签是自封闭,在这种情况下,读者从阅读跳过他们所有。由于XML文件作为标准被引入公司,并且每天都会更改其内容,所以我无法更改它们的结构。我试图使用IsEmptyElement属性,我尝试了不同的方式来读取数据,但不管怎样,它总是跳过带有空标记的文件。现在一个星期我将尝试每一个教程中,我能找到的了,可是不应对已工作
你看到的那段代码就是“最后的版本”。在它之前,我已经试过没有reader.Skip属性,并且如果它是空的,我检查了文本元素,但是这也不起作用 – Ange1 2015-02-06 16:18:49