Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果文件包含自动关闭标记,则XmlReader不会读取该文件_C#_Asp.net 3.5_Xmlreader - Fatal编程技术网

C# 如果文件包含自动关闭标记,则XmlReader不会读取该文件

C# 如果文件包含自动关闭标记,则XmlReader不会读取该文件,c#,asp.net-3.5,xmlreader,C#,Asp.net 3.5,Xmlreader,我有以下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"&g

我有以下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;
            }
        }
试试看
{
while(reader.Read())
{
开关(reader.NodeType)
{
case XmlNodeType.Element://节点是一个元素。
如果(reader.Name==“频道”)
{
while(reader.MoveToNextAttribute())
{
如果(reader.Name==“Name”)
{
//epg=新的epg2();
epg.channelname=reader.Value;
epg.number=Convert.ToInt32(channelNames[i][1]);
xmlfile.Add(epg);
}
}
}
如果(reader.Name==“事件”)
{
while(reader.MoveToNextAttribute())
{
if(reader.Name==“开始时间”)
{
//Ev=新事件();
Ev.starttime=Convert.ToDateTime(reader.Value);
}
else if(reader.Name==“持续时间”)
{
Ev.duration=转换为32(读卡器值);
}
else if(reader.Name==“Name”)
{
Ev.duration=转换为32(读卡器值);
}
}
}
if(reader.Name==“short\u event\u descriptor”)
{
while(reader.MoveToNextAttribute())
{
如果(reader.Name==“Name”)
{
Ev.name=reader.Value;
}
}
}
打破
case XmlNodeType.Text://显示每个元素中的文本。
如果(申娟>0)
{
尝试
{
Ev.shortDescription=reader.Value.Replace(“\r\n”,”).Replace(“\r”,”).Replace(“\n”,”).Replace(“Sub.Ang”,”).Replace(“Sub.Alb”,”).Replace(“\”,“\”);
}
接住
{
Ev.shortDescription=读取器.Value;
}
申娟*=-1;
}
else if(shenjuar<0)
{
尝试
{
Ev.longDescription=reader.Value.Replace(“\r\n”,”).Replace(“\r”,”).Replace(“\n”,”).Replace(“Sub.Ang”,”).Replace(“Sub.Alb”,”).Replace(“\”,“\”);
}
接住
{
Ev.longDescription=reader.Value;
}
申娟*=-1;
epg.EventNumber.Add(Ev);
}
else reader.Skip();
打破
case XmlNodeType.EndElement://显示元素的结尾
reader.Skip();
打破
}
}
xmlfile.Add(epg);
}
捕获(FileNotFoundException fnfe)
{
TextBox1.Text=“错误。找不到“+CName+”.xml文件”;
//返回;
}
捕获(异常exc)
{
TextBox1.Text=“未知错误:\r\n在“+CName+”上出错。xml文件\r\n错误描述:”+exc.Message;
//返回;
}
}

关键是,这段代码用于XML文件列表,问题是对于某些文件,标记是自动关闭的,在这种情况下,读取器根本不会读取它们。由于XML文件是作为标准文件带到公司的,并且每天都在更改它们的内容,所以我无法更改它们的结构。我尝试过使用IsEmptyElement属性,尝试过不同的方法读取数据,但不管怎样,它总是跳过带有空标记的文件。现在已经一个星期了,我正在尝试我能找到的每一个教程,但是没有任何处理工作

您有跳过
文本的代码
元素:

if (reader.IsStartElement("text"))
    reader.Skip();

移除它并用XmlReader检查自动关闭元素。IsEmptyElement

您看到的代码片段是“最后一个v”