首页
博客
专栏课程
下载
问答
社区
会员中心
论坛
代码
直播
Chrome 插件
能力认证
导航
全部
C#综合技术
C#互联网桌面应用
AppLauncher
WinForm&WPF
C#开发新技术
博文收录
Ada助手
问答
...
C#综合技术
C#互联网桌面应用
AppLauncher
WinForm&WPF
C#开发新技术
博文收录
Ada助手
问答
登录/注册
社区
C#
帖子详情
XmlDocument.LoadXML时出错。
gcq
2008-09-05 10:03:13
用XmlDocument对象Load以下XML的时候,
<?xml version="1.0"?>
<root>
<test value=""/>
</root>
提示以下错误:
“ ”(十六进制值 0x05)是无效的字符。 行 3,位置 14。
经过测试,是""字符出现的错误。
但是,该XML用IE却能正确打开。
请教各位,问题原因是什么?如何解决?
谢谢!
...全文
给本帖投票
2192
24
打赏
收藏
XmlDocument.LoadXML时出错。
用XmlDocument对象Load以下XML的时候, 提示以下错误: “ ”(十六进制值 0x05)是无效的字符。 行 3,位置 14。 经过测试,是""字符出现的错误。 但是,该XML用IE却能正确打开。 请教各位,问题原因是什么?如何解决? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
发表回复
按下Enter换行,Ctrl+Enter发表内容
编辑
预览
轻敲空格完成输入
显示为
卡片
标题
链接
打赏红包
xinsword
2008-09-27
打赏
举报
回复
有个笨方法,
xml中
0x00至0x08
0x0b至0x0c
0x0e至0x1f
都是无效字符串
定义一个常量
先用
string xml= File.ReadAllText("aa.xml",Encoding.UTF8);
的方法载入
把字符串xml中的每个无效字符替换成自己的一个标记字符串
比如把,0x00 替换成 "{$fixchar:0$}"
把,0x01 替换成 "{$fixchar:1$}"
现在用 xmlDocument.LoadXml(xml),就不会出错了
读完节点内容后,在把得到的节点内容反过来过滤一下 例如把"{$fixchar:0$}" 过滤成0x00 ....
具体的代码不写了
还好无效字符不多
gcq
2008-09-11
打赏
举报
回复
谢谢各位支持以及帮助。结贴。
gcq
2008-09-11
打赏
举报
回复
[Quote=引用 21 楼 danjiewu 的回复:]
确实存在你所说的问题,并不是我所说的原因,网上查了一下[#x0-#x8] | #xB | #xC | [#xE-#x1F] | [#xD800-#xDFFF] | #xFFFE | #xFFFF是xml的非法字符。
问题的原因是生成xml的程序不正确,很可能是自己拼字符串得到的xml。如果在程序中通过XmlTextWriter或者XmlDocument生成的话应该是
<?xml version="1.0"?>
<root>
<test value="" />
</root>
至于IE为什么能显式,可能是因为IE只是把Xml当作文本显示,不是标准的Xml解析程序吧。
[/Quote]
谢谢!明白了。
其实“”(十六进制值 0x05)我也确认过了,原始文字是字符串"\\\\005"。
可能在XML转换过程中,用字符串处理的时候,变成字符"\005"从而导致字符串错误。
可是,XML是通过别的工具生成的,看来只能替换了。
danjiewu
2008-09-10
打赏
举报
回复
[Quote=引用 20 楼 gcq 的回复:]
引用 18 楼 danjiewu 的回复:
Xml实际是用什么编码保存的和Xml里的encoding声明不是一回事,如果不一致就会出现这样的错误。
你在读取Xml内容时要指定编码格式,比如
string xml= File.ReadAllText("aa.xml",Encoding.UTF8);
XmlDocument.Load("aa.xml",Encoding.UTF8);
谢谢!
问题中示范XML原文(请拷贝)不知道你是否可以用XmlDocument(或者XmlReader)打开?
[/Quote]
确实存在你所说的问题,并不是我所说的原因,网上查了一下[#x0-#x8] | #xB | #xC | [#xE-#x1F] | [#xD800-#xDFFF] | #xFFFE | #xFFFF是xml的非法字符。
问题的原因是生成xml的程序不正确,很可能是自己拼字符串得到的xml。如果在程序中通过XmlTextWriter或者XmlDocument生成的话应该是
<?xml version="1.0"?>
<root>
<test value="" />
</root>
至于IE为什么能显式,可能是因为IE只是把Xml当作文本显示,不是标准的Xml解析程序吧。
newtypebao
2008-09-09
打赏
举报
回复
[Quote=引用 6 楼 zzyhuian06142 的回复:]
那就写个方法自动的去转全角和半角了
在KeyPress里面
public char FullCodeToHalfCode(char c)
{
//得到c的编码
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(c.ToString());
int H = Convert.ToInt32(bytes[1]);
int L = Convert.ToInt32(bytes[0]);
//得到unicode编码
int value = H * 256 + L;
//是全角
if …
[/Quote]
强人....自动的去转全角和半角...
gcq
2008-09-09
打赏
举报
回复
[Quote=引用 12 楼 LQknife 的回复:]
你先把这个xml当成普通的文件来读到字符串
然后修改这个字符串成符合xml标准,最后
dOC.LoadXml(STR);
[/Quote]
现在关键是为什么IE可以打开问题中的XML,而XMLDocument对象(包括XMLReader)却不行。
除了替换出问题的字符以外,没有其他办法了吗?
gcq
2008-09-09
打赏
举报
回复
[Quote=引用 18 楼 danjiewu 的回复:]
Xml实际是用什么编码保存的和Xml里的encoding声明不是一回事,如果不一致就会出现这样的错误。
你在读取Xml内容时要指定编码格式,比如
string xml= File.ReadAllText("aa.xml",Encoding.UTF8);
XmlDocument.Load("aa.xml",Encoding.UTF8);
[/Quote]
谢谢!
问题中示范XML原文(请拷贝)不知道你是否可以用XmlDocument(或者XmlReader)打开?
CCjian
2008-09-09
打赏
举报
回复
LS 有理,
学习
danjiewu
2008-09-09
打赏
举报
回复
[Quote=引用 17 楼 gcq 的回复:]
引用 15 楼 danjiewu 的回复:
你的XML是怎么得到的?首先要确定Xml是按什么编码保存的。
IE能显示是因为IE默认的编码和程序不一样,你在Load的时候指定编码格式试试。utf-8或者utf-16(unicode),应该是两者之一。
XML是另外一个工具得到的。
但是问题中的""是十六进制值 0x05,在IE中可以正常打开显示,XmlDocument(或者XmlReader)打开却出错。 encoding=utf-16也出错
[/Quote]
Xml实际是用什么编码保存的和Xml里的encoding声明不是一回事,如果不一致就会出现这样的错误。
你在读取Xml内容时要指定编码格式,比如
string xml= File.ReadAllText("aa.xml",Encoding.UTF8);
XmlDocument.Load("aa.xml",Encoding.UTF8);
gcq
2008-09-09
打赏
举报
回复
[Quote=引用 15 楼 danjiewu 的回复:]
你的XML是怎么得到的?首先要确定Xml是按什么编码保存的。
IE能显示是因为IE默认的编码和程序不一样,你在Load的时候指定编码格式试试。utf-8或者utf-16(unicode),应该是两者之一。
[/Quote]
XML是另外一个工具得到的。
但是问题中的""是十六进制值 0x05,在IE中可以正常打开显示,XmlDocument(或者XmlReader)打开却出错。 encoding=utf-16也出错
danjiewu
2008-09-09
打赏
举报
回复
哦,你是用LoadXml的,那你在得到string的时候需要制定编码为utf-8
danjiewu
2008-09-09
打赏
举报
回复
你的XML是怎么得到的?首先要确定Xml是按什么编码保存的。
IE能显示是因为IE默认的编码和程序不一样,你在Load的时候指定编码格式试试。utf-8或者utf-16(unicode),应该是两者之一。
LQknife
2008-09-08
打赏
举报
回复
你先把这个xml当成普通的文件来读到字符串
然后修改这个字符串成符合xml标准,最后
dOC.LoadXml(STR);
gcq
2008-09-08
打赏
举报
回复
有同学解决过此类问题吗?
gcq
2008-09-05
打赏
举报
回复
[Quote=引用 8 楼 lu_huanling 的回复:]
能不能在LOADXML之前把 ¦ 换掉,通过正则.
不改原文件.
但不知道怎么写.呵呵
[/Quote]
谢谢!
你的意思是读到变量里修改后再LOAD?
那分析出来的值不是一样会变的。 :)
lu_huanling
2008-09-05
打赏
举报
回复
能不能在LOADXML之前把 | 换掉,通过正则.
不改原文件.
但不知道怎么写.呵呵
gcq
2008-09-05
打赏
举报
回复
谢谢 zzyhuian06142 。
这样可行,但是改变原有的值了。
有没有其他方法在不改变值的前提下正常LOADXML呢?
比如,IE就可以正常打开问题中的XML。
zzyhuian06142
2008-09-05
打赏
举报
回复
那就写个方法自动的去转全角和半角了
在KeyPress里面
public char FullCodeToHalfCode(char c)
{
//得到c的编码
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(c.ToString());
int H = Convert.ToInt32(bytes[1]);
int L = Convert.ToInt32(bytes[0]);
//得到unicode编码
int value = H * 256 + L;
//是全角
if (value >= 65281 && value <= 65374)
{
int halfvalue = value - 65248;//65248是全半角间的差值。
byte halfL = Convert.ToByte(halfvalue);
bytes[0] = halfL;
bytes[1] = 0;
}
else if (value == 12288)
{
int halfvalue = 32;
byte halfL = Convert.ToByte(halfvalue);
bytes[0] = halfL;
bytes[1] = 0;
}
else
{
return c;
}
//将bytes转换成字符
string ret = System.Text.Encoding.Unicode.GetString(bytes);
return Convert.ToChar(ret);
}
gcq
2008-09-05
打赏
举报
回复
谢谢楼上各位的帮助。
是""字符(不是正常打出的“|”)出现的问题。
而类似这种全角字符有很多,除了逐个替换以外,如何能在保证XML内容不改变的前提下,正确Load这样的XML?
zzyhuian06142
2008-09-05
打赏
举报
回复
tringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\"?> ");
sb.Append("<root> ");
sb.Append("<test value=\"| \"/> ");
sb.Append("</root> ");
XmlDocument d = new XmlDocument();
try
{
d.LoadXml(sb.ToString());
XmlNode node = d.SelectSingleNode("/root/test");
MessageBox.Show(node.Attributes["value"].Value.ToString());
MessageBox.Show("OK");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
d = null;
sb = null;
}
测试输出的也都正常的
加载更多回复(4)
javascript DOM 操作.doc
FireFox 中处理错误:在FireFox中,可以使用parseError对象来输
出错
误信息,该对象会替换
出错
的
xml
文档。 ```javascript if(o
Xml
Dom.documentElement.tagName != "parsererror") { // 没有发生错误 } else { // ...
c#和java读写
xml
辅助工具
Xml
Document
doc = new
Xml
Document
(); doc.
Load
("example.
xml
"); // 修改
XML
Xml
Node node = doc.SelectSingleNode("//node"); node.InnerText = "新值"; doc.Save("example.
xml
"); ``` 2. **
Xml
Reader/
Xml
Writer*...
C#
XML
字符串包含特殊字符的处理转换方法小结
另一种方法是使用CDATA区块,CDATA区块中的内容在
Xml
Document
解析
时
会自动忽略掉。例如: ```
xml
<![CDATA[特殊字符>>>,包含特殊字符的内容]]> ``` 如果需要对大量的
XML
字符串进行特殊字符转换,可以使用函数来实现...
js使用小技巧
禁止选取<body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return ...
js跨浏览器实现将字符串转化为
xml
对象的方法
在JavaScript中,将一个字符串转换为
XML
对象是一个常见的任务,特别是在处理
XML
数据或者与服务器进行异步通信
时
。然而,由于浏览器之间的兼容性问题,尤其是IE浏览器的不同版本,这个过程可能会变得复杂。本文将详细...
C#
111,095
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
积分榜
荣誉榜
原力榜
学习榜
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章
手机看
关注公众号
客服
返回
顶部