【发布时间】:2017-11-08 18:03:16
【问题描述】:
我有以下 Xml 结构:
<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 属性,我尝试了不同的方式来读取数据,但无论如何,它总是会跳过带有空标签的文件。已经一个星期了,我正在尝试我能找到的每一个教程,但没有任何处理工作
【问题讨论】:
标签: c# asp.net-3.5 xmlreader