处理XML时说遇到无效的字符,啥意思?

badiku 2010-12-23 12:27:09
处理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>丨杀无赦丨﹎</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。

...全文
283 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
badiku 2010-12-23
  • 打赏
  • 举报
回复
在记事本里的话,我看如果是默认的宋体的话,可以正常显示成一个 向右的箭头

如果把字体改成 雅黑或Arial,则显示成一个小方框

不管怎样,为什么两种XML的处理结果不一样,有啥原因?
badiku 2010-12-23
  • 打赏
  • 举报
回复
我上面有代码也有XML,有兴趣的完全可以试一下啊,一分钟的事

没有>之类的特殊字符, 就是一个向右的箭头符号.很多人用这些奇怪的符号作网名的

即使写到一个文本文件中去也是可以看到的,就是一个向右的箭头符号,像 -> 这样,是一个字符

var f = File.AppendText(@"d:\test.txt");
f.WriteLine("{0} : {1}", d.Name, d.InnerText);
wangsong145 2010-12-23
  • 打赏
  • 举报
回复
我估计是不是有类似>之类的特殊字符啊
badiku 2010-12-23
  • 打赏
  • 举报
回复
是不是要加什么参数选项的? 对XML不是很熟悉

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧