C#XML读取未处理的错误 [英] C# XML read unhandled error

查看:75
本文介绍了C#XML读取未处理的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



i尝试读取xml文件

但我收到此错误:类型'System.Xml未处理的异常System.Xml.dll中发生.XmlException'



附加信息:''(onaltılıkdeğeri0x1B),geçersizbirkarakter.Satır22,konum 14。



我的c#代码:

Hello,

i try to read xml file
but i got this error:"An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll

Additional information: ' ' (onaltılık değeri 0x1B), geçersiz bir karakter. Satır 22, konum 14."

my c# code:

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文件:



and my xml file:

<?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元素



我可以解决这个问题吗?



我尝试过:



谷歌搜索和调试删除xml文件逐行和fibd错误行



and i my exception throw sx_r elements

howe can i fix this?

What I have tried:

googling and debugging deleting xml file line by line and fibd the error line

推荐答案



我创建了一个示例你的问题的项目。

当我将你的xml粘贴到记事本++时,有一个未知的字符。

请在notepad ++中打开你的xml。你也会看到ESC角色。

BONU600 ESC? STYP1? ESC


你好,< br $>


0x1b字符(ESC)是错误的原因。我用'字符(0x60)改变了Esc(0x1b)

并读取了xml 。它有效。



Hi,

0x1b character(ESC) is the reason for the error.I changed Esc(0x1b)
with ` character(0x60) and read xml. It works.

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;
          }
      }


这篇关于C#XML读取未处理的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆