解析器退出循环

use*_*123 -2 c# xml

我试图使用此代码解析文件.我无法做到.任何帮助都会很棒我试图从文本框中传递文件名,它只是做得很好,但解析存在于循环中.

public void ParseXML(String FileName)
{

  XmlTextReader reader = new XmlTextReader(FileName);
  XmlNodeType type;
  while (reader.Read())
  {
    type = reader.NodeType;
    if (type == XmlNodeType.Element)
    {
      if (reader.Name == "PIChart")
      {
        if (reader.Name == "NumberofSectors")
        {
          m_SectorValue = Convert.ToInt32(reader.Value);
          Sectors = m_SectorValue;
        }
        if (reader.Name == "AngleofSector")
        {
          if (reader.Name == "StartAngle")
          {
            m_StartValue = Convert.ToInt32(reader.Value);
            StartValue.Enqueue(m_StartValue);
          }
          if (reader.Name == "EndAngle")
          {
            m_EndAngle = Convert.ToInt32(reader.Value);
            EndAngle.Enqueue(m_EndAngle);
          }
        }
        if (reader.Name == "ColorofSectorRegion")
        {
          if (reader.Name == "Region")
          {
            m_Region = Convert.ToInt32(reader.Value);
            Region.Enqueue(m_Region);
          }
          if (reader.Name == "Color")
          {
            m_Color = reader.Value;
            color.Enqueue(m_Color);
          }
        }
      }
    }
  }
  reader.Close();
}
Run Code Online (Sandbox Code Playgroud)

我试图解析的文件

<PIChart>
  <NumberofSectors>5</NumberofSectors>
  <AngleofSector>
    <StartAngle>0</StartAngle>
    <EndAngle>72</EndAngle>
    <StartAngle>72</StartAngle>
    <EndAngle>144</EndAngle>
  </AngleofSector>
  <ColorofSectorRegion>
    <Region>0</Region>
    <Color>Green</Color>
  </ColorofSectorRegion>
</PIChart>
Run Code Online (Sandbox Code Playgroud)

Jim*_*hel 5

你的部分问题是:

            if (reader.Name == "PIChart")
            {
                if (reader.Name == "NumberofSectors")
                {
                    m_SectorValue = Convert.ToInt32(reader.Value);
                    Sectors = m_SectorValue;
                }
                if (reader.Name == "AngleofSector")
                {
                // etc.
Run Code Online (Sandbox Code Playgroud)

你的第一个条件期望reader.Name等于"PIChart".然后你检查它是否等于"NumberofSectors"或"AngleOfSector"等.这是永远不会起作用的,因为reader.Name不能同时保存两个单独的值.

您是否可能正在寻找名为"NumberOfSectors" 的属性?您需要查看GetAttribute方法.

如果您编辑问题并显示至少部分您正在尝试阅读的XML文件,这将有所帮助.

你的评论后

阅读它XmlDocument或使用序列化程序会更好.但是如果你真的想读这个,你需要使用XmlReader.ReadSubTree来解析那些单独的元素.就像是:

if (reader.Name == "PIChart")
{
    ParsePIChart(reader.ReadSubTree());
}
Run Code Online (Sandbox Code Playgroud)

并且您的ParsePIChart方法将读取该子树并解析子元素.