首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# XML中十六进制字符的解决方案解决方法

2013-12-02 
C# XML中十六进制字符的解决方案string filePath c://data.xmlstring str sa,,wertry{XElement

C# XML中十六进制字符的解决方案
string filePath = "c://data.xml";
            string str = "sa,,wer";
            try
            {
                XElement root = new XElement(new XElement(str));
                root.Save(filePath);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }


C# XML中十六进制字符的解决方案解决方法

上面的代码是我写的简单事例,实际中我是得到的字符串要写入xml。
实际中不能采用去除特殊字符的方法,如str1="123,123" str2="123/123" 如果去除特殊字符,那么str1和str2将都变为"123123",无法区分。想问问看谁有好的解决方案,如果转码的话,用那种比较好,最好能把解决的代码贴上来,谢谢了 C#?XML?LINQ?十六进制
[解决办法]
使用CDATA,或者做一个BASE64编码。
[解决办法]
对于特殊字符可以用base64编码后写入,读取时解码即可
[解决办法]
你在名称中定义符号肯定是不可以的。节点名称不允许有特殊字符的。

属性值,节点值才可以。
[解决办法]


        public static string XmlEncode(string s)
        {
            s = s.Replace("&", "&");
            for (int i = 0; i < 32; i++)
            {
                s = s.Replace(((char)i).ToString(), "&amp;#" + i + ";");
            }
            for (int i = 95; i < 97; i++)
            {
                s = s.Replace(((char)i).ToString(), "&amp;#" + i + ";");
            }
            return s;
        }


        public static string ReXmlEncode(string s)
        {
            s = s.Replace("&amp;", "&");
            for (int i = 0; i < 32; i++)
            {
                s = s.Replace("&#" + i + ";", ((char)i).ToString());
            }
            for (int i = 95; i < 97; i++)
            {
                s = s.Replace("&#" + i + ";", ((char)i).ToString());
            }
            return s;
        }


        /// <summary>
        /// 把一个字符串中的 低序位 ASCII 字符 替换成 &#x  字符
        /// 转换  ASCII  0 - 8  -> &#x0 - &#x8
        /// 转换  ASCII 11 - 12 -> &#xB - &#xC
        /// 转换  ASCII 14 - 31 -> &#xE - &#x1F


        /// </summary>
        /// <param name="tmp"></param>
        /// <returns></returns>
        public static string ReplaceLowOrderASCIICharacters(string tmp)
        {
            StringBuilder info = new StringBuilder();
            foreach (char cc in tmp)
            {
                int ss = (int)cc;
                if (((ss >= 0) && (ss <= 8)) 
[解决办法]
 ((ss >= 11) && (ss <= 12)) 
[解决办法]
 ((ss >= 14) && (ss <= 32)))
                    info.AppendFormat("", ss);//&#x{0:X};
                else info.Append(cc);
            }
            return info.ToString();
        }

热点排行