zoukankan      html  css  js  c++  java
  • XML解析中文字符

          在利用c#解析xml文件的时候,如果xml文件中包含中文字符,可能会遇到如下出错提示:"异常详细信息: System.Xml.XmlException: 给定编码中有无效的字符。 行 2,位置 26。"如果我们的代码没有任何问题,那么就应该是xml文件表头有问题,改成:"<?xml version=1.0 encoding=gb2312?>"即可,因为默认的表格式只支持Ascii码格式文件,不支持中文字符。

    解析方法:举例如下,其中ConfigLayer是自定义的结构体,存储三个变量,From,To,Clip.而xml文件的基本内容如下:

     1 <?xml version="1.0" encoding="gb2312"?>
     2 <ExportConfig>
     3 <Layer>
     4 <From>BOUA</From>
     5 <To>BOUA</To>
     6 <Clip>true</Clip>
     7 </Layer>
     8 <Layer>
     9 <From>中国</From>
    10 <To>中国</To>
    11 <Clip>true</Clip>
    12 </Layer>
    13 <Layer>
    14 <From>BOUP</From>
    15 <To>BOUP</To>
    16 <Clip>true</Clip>
    17 </Layer>
    18 <Layer>
    19 <From>BANP</From>
    20 <To>BANP</To>
    21 <Clip>true</Clip>
    22 </Layer>
    23 <Layer>
    24 <From>VEGA</From>
    25 <To>VEGA</To>
    26 <Clip>true</Clip>
    27 </Layer>
    28 <Layer>
    29 <From>VEGP</From>
    30 <To>VEGP</To>
    31 <Clip>true</Clip>
    32 </Layer>
    33 <Layer>
    34 <From>VEGL</From>
    35 <To>VEGL</To>
    36 <Clip>true</Clip>
    37 </Layer>
    38 </ExportConfig>

    则将xml文件内容解析到内存中可通过如下方式:

     1 public static List<ConfigLayer> AnalyseXmlDoc(string xmlPath)
     2         {
     3             try
     4             {
     5                 if (xmlPath == null)
     6                     return null;
     7                 List<ConfigLayer> configLayerList = new List<ConfigLayer>();
     8                 XmlDocument xmlDoc = new XmlDocument();
     9                 xmlPath = xmlPath.Trim();
    10                 xmlDoc.Load(xmlPath);
    11                 XmlNodeReader pNodeReader = new XmlNodeReader(xmlDoc);
    12                 while (pNodeReader.Read())
    13                 {
    14                     if (pNodeReader.NodeType == XmlNodeType.Element)
    15                     {
    16                         if (pNodeReader.Name == "Layer")
    17                         {
    18                             ConfigLayer configLayer=GetValuesByClassName(pNodeReader.Name, pNodeReader);
    19                             configLayerList.Add(configLayer);
    20                         }
    21                     }
    22                 }
    23                 pNodeReader.Close();
    24                 pNodeReader = null;
    25                 xmlDoc = null;
    26                 return configLayerList;
    27             }
    28             catch (Exception ex)
    29             {
    30                 MessageBox.Show("配置文件解析出错:" + ex.Message);
    31                 return null;
    32             }
    33         }
    34 
    35         public static ConfigLayer GetValuesByClassName(string name, XmlReader pNodeReader)
    36         {
    37             //List<ConfigLayer> ConfigLayerList = new List<ConfigLayer>();
    38             ConfigLayer layerInfo = new ConfigLayer();
    39             while (pNodeReader.Read())
    40             {               
    41                 if (pNodeReader.Name == "Layer" && pNodeReader.NodeType == XmlNodeType.EndElement) break;
    42                 switch (pNodeReader.Name)
    43                 {
    44                     case "From":
    45                         layerInfo.From = pNodeReader.ReadString();
    46                         break;
    47                     case "To":
    48                         layerInfo.To = pNodeReader.ReadString();
    49                         break;
    50                     case "Clip":
    51                         string clip = pNodeReader.ReadString();
    52                         if (clip == "false")
    53                         {
    54                             layerInfo.Clip = false;
    55                             break;
    56                         }
    57                         else
    58                         {
    59                             layerInfo.Clip = true;
    60                             break;
    61                         }                           
    62                 }
    63                 //ConfigLayerList.Add(layerInfo);
    64             }
    65             return layerInfo;         
    66         }


    初学xml解析:请多指教

  • 相关阅读:
    LVM逻辑卷管理练习
    浅谈TCP三次握手和四次分手
    centos模拟创建CA和申请证书
    破解root口令
    shell脚本编程进阶总结
    基于FIFO的串口发送机设计
    流水线方式LUT查表法乘法器
    verilog中有符号整数说明及除法实现
    LUT查表法乘法器所犯下错误。。。。
    似然函数
  • 原文地址:https://www.cnblogs.com/daidaigua/p/2457447.html
Copyright © 2011-2022 走看看