Member 10525430 Ответов: 2

C# XML read unhandled error


Привет,

я пытаюсь прочитать xml файл
но я получил эту ошибку:"необработанное исключение типа 'System.В формате XML.Xmlexception В' произошел в System.Xml.dll

Дополнительная информация: '' (onaltılık değeri 0x1B), geçersiz bir karakter. Сатир 22, конум 14."

мой код c# :
using (XmlReader reader = XmlReader.Create("M42yl7IF.xml"))
            {
                string a = "";
                while (reader.Read())
                {
                    // Only detect start elements.
                    if (reader.IsStartElement())
                    {
                        // Get element name and switch on it.

                        a += reader.Name+"\n";
                    }
                }
                MessageBox.Show(a);
            }


и мой xml-файл:
<?xml version="1.0" ?>
<!--M42yl7IF.S## DATE 2016.08.01 14:13:46-->
<sx_xmlfile>
<sx_header>
<sxxml_vers>1.01</sxxml_vers>
<sxedv_vers>8.02</sxedv_vers>
<sxapp_vers>01.29</sxapp_vers>
<sxapp_date>18.06.2015 8:48</sxapp_date>
<sxapp_prog>61427054129</sxapp_prog>
<sxapp_kund>build:61427054129 C:tur V:129 O:std</sxapp_kund>
<sxapp_typ>SC2+</sxapp_typ>
<sxldb_vers>16.21</sxldb_vers>
<sxinbe_dat>22.06.2016 17:57:27</sxinbe_dat>
<sx_sysid>8</sx_sysid>
<sx_wanu>01</sx_wanu>
<sx_table>BOKA</sx_table>
<sx_cmd>h</sx_cmd>
<sx_id>00</sx_id>
<sxinfo_para></sxinfo_para>
</sx_header>
<sx_data>
<sx_r>BONU600STYP1ABNU1WANU1BEN11BEN25SNR110ANUM1GPTY1BT201000POS11POS41RANU1SNR3-1VART2BART1RASA3ZEIS1470060740ZEIE1470060740</sx_r>
<sx_r>BONU600STYP17BT101000MWNU1</sx_r>
<sx_r>BONU600STYP2ABNU1WANU1BEN11BEN2-1SNR14GPTY1PNAB1WGNU1BT101000BT121000BT201000POS11MWNU1PAR11SNR31000ZEIS1470060740</sx_r>
<sx_r>BONU600STYP4BT201000POS11POS41BT131000</sx_r>
<sx_r>BONU600STYP10000</sx_r>
</sx_data>
</sx_xmlfile>


и я свое исключение бросаю sx_r элементов

как я могу это исправить?

Что я уже пробовал:

поиск в Google и отладка удаление xml файла строка за строкой и fibd строка ошибки

2 Ответов

Рейтинг:
2

turanian

Привет,

Причиной ошибки является символ 0x1b(ESC).Я изменил Esc(0x1b)
с символом ` (0x60) и считыванием xml. Это работает.

static void Main(string[] args)
      {
          Start();
      }

      private static string Start()
      {
          TryToCleanXMLBeforeParsing("M42yl7IF.xml");

          return null;
      }

      public static string TryToCleanXMLBeforeParsing(String physicalPath)
      {
          try
          {
              string xml;

              Encoding encoding;
              using (var reader = new StreamReader(File.OpenRead(physicalPath)))
              {
                  xml = reader.ReadToEnd();
                  encoding = reader.CurrentEncoding;
              }
              byte[] encodedString;
              if (encoding.Equals(Encoding.UTF8)) encodedString = Encoding.UTF8.GetBytes(xml);
              else if (encoding.Equals(Encoding.UTF32)) encodedString = Encoding.UTF32.GetBytes(xml);
              else encodedString = Encoding.Unicode.GetBytes(xml);
              int index = 0;
              foreach (byte item in encodedString)
              {
                  if (item == 0x1b)
                      encodedString[index] = 0x60;
                  index++;
              }
              string result = System.Text.Encoding.UTF8.GetString(encodedString);
              var esc = encodedString.FirstOrDefault(x => x == 0x1b);

              var ms = new MemoryStream(encodedString);
              ms.Flush();
              ms.Position = 0;

              var settings = new XmlReaderSettings { CheckCharacters = false };
              using (XmlReader reader = XmlReader.Create(ms, settings))
              {
                  string a = "";
                  while (reader.Read())
                  {
                      // Only detect start elements.
                      if (reader.IsStartElement())
                      {
                          // Get element name and switch on it.

                          a += reader.Name + "\n";
                      }
                  }
                  return a;
              }
          }
          catch (Exception ex)
          {
              return null;
          }
      }


Рейтинг:
0

turanian

Привет,
Я создал примерный проект для вашего вопроса.
Когда я копирую ваш xml-файл в notepad++, там появляется неизвестный символ.
Пожалуйста, откройте свой xml-файл в notepad++ . Вы также увидите символ ESC.
BONU600ESCSTYP1ESC


Member 10525430

Да это правда но мне нужен esc bcs этот xml файл в моем устройстве xml файл и он отделяет команду esc
Регулятор Аски сепараторы для моего устройства
Как я могу прочитать этот esc?