处理XML时说遇到无效的字符,啥意思?和这个类似,
http://topic.csdn.net/u/20091107/16/4168e72f-9d0f-43ef-a18e-536d084fc9ca.html但是不一样, 我这个是用 XmlDocument . load () 方法不会出错的,
但只是用  XElement.Load() 才会出错.为啥? 是不是 XmlDocument 比 XElement 容错性好? 
能用XmlDocument处理的文件 , 偏就不能用 XElement 处理?其实我也不知道这两个东西有啥区别,但是为什么为这种情况呢?
(就是姓名中常见的一些左右箭头之类的符号,文件是UTF-8格式的)
看代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Text;
using System.Xml.Linq;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string file = @"D:\test.xml";//<?xml version="1.0"?>
//<root>
//  <post>
//    <nick>&#x1A;丨杀无赦丨﹎</nick>
//    <reply>yes</reply>
//  </post>
//</root>            xmlTest1(file);
            xmlTest2(file);            Console.ReadKey();
        }        //正常
        private static void xmlTest1(string file)
        {
            var xml = new XmlDocument();
            xml.Load(file);
            foreach (XmlNode  item in xml.ChildNodes[1])
                foreach (XmlNode  d in item.ChildNodes )
                    Console.WriteLine("{0} : {1}",d.Name  ,d.InnerText  );
        }        //出错
        private static void xmlTest2(string file)
        {
            try { XElement root = XElement.Load(file); }
            catch (Exception e) { Console.WriteLine(e.Message); }
        }
    }
}//执行结果://nick : 丨杀无赦丨﹎
//reply : yes
//“”(十六进制值 0x1A)是无效的字符。 行 4,位置 14。

解决方案 »

  1.   

    是不是要加什么参数选项的? 对XML不是很熟悉
      

  2.   

    我上面有代码也有XML,有兴趣的完全可以试一下啊,一分钟的事没有>之类的特殊字符, 就是一个向右的箭头符号.很多人用这些奇怪的符号作网名的即使写到一个文本文件中去也是可以看到的,就是一个向右的箭头符号,像 -> 这样,是一个字符var f = File.AppendText(@"d:\test.txt"); 
    f.WriteLine("{0} : {1}", d.Name, d.InnerText);
      

  3.   

    在记事本里的话,我看如果是默认的宋体的话,可以正常显示成一个 向右的箭头如果把字体改成 雅黑或Arial,则显示成一个小方框不管怎样,为什么两种XML的处理结果不一样,有啥原因?