XDocument向xml文件中写入\r \n等特殊字符的问题

问题描述

问题:在使用XDocument向xml文件中写入rn等特殊字符时会出现这个错误:{"“.”(十六进制值0x00)是无效的字符。"}。查找资料,有人说用Base64进行转换,转换后写入没问题,但是在读取的时候中文字符全变成了乱码。请问:XDocument中有什么好的方法避免rn写入时出错的问题吗?

解决方案

解决方案二:
给你写一个例子usingSystem;usingSystem.IO;usingSystem.Xml.Linq;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){varx=newXDocument();varr=newXElement("xml");x.Add(r);r.Add(newXElement("ToUserName","abcdrn1234"));r.Add(newXElement("FromUserName","defg"));r.Add(newXElement("Content",newXCData("目前还不能处理您的图片。rn怎么办?")));varstr=x.ToString();Console.WriteLine(str);Console.WriteLine();vary=XDocument.Load(newStringReader(str));Console.WriteLine("ToUserName={0}",y.Root.Element("ToUserName").Value);Console.WriteLine("按任意键结束.....");Console.ReadKey();}}}

你可以看到,内容中包含rn,根本用不着任何找麻烦的做法。
解决方案三:
引用楼主cabinriver的回复:

问题:在使用XDocument向xml文件中写入rn等特殊字符时会出现这个错误:{"“.”(十六进制值0x00)是无效的字符。"}。

这个说法非常可疑。编程如做人,要注意避免标题党。
解决方案四:
这种报错一般都是在开头或者结尾非xml节点错有特殊字符,而不是换行导致的
解决方案五:
引用2楼sp1234的回复:

Quote: 引用楼主cabinriver的回复:
问题:在使用XDocument向xml文件中写入rn等特殊字符时会出现这个错误:{"“.”(十六进制值0x00)是无效的字符。"}。

这个说法非常可疑。编程如做人,要注意避免标题党。

我又测了一下,确实不是rn引起的,而是引起的。如下程序,会报刚才的错:varx=newXDocument();varr=newXElement("xml");x.Add(r);StringstrTest="";r.Add(newXElement("ToUserName",strTest));x.Save(fileName);

这种问题是不是要先对字符串进行处理,将转为别的字符进行存贮?有无特定的API呢?
解决方案六:
引用3楼starfd的回复:

这种报错一般都是在开头或者结尾非xml节点错有特殊字符,而不是换行导致的

是不是应该有专门处理此类特殊字符的函数
解决方案七:
楼主可能是在拼接XML吧,作为有规则的文本,特殊字符有它自己的编码方法,楼主试试写入双引号,尖括号也会有错误的.所以要用代码来生成,1楼写的是一种方法,还有用XmlTextWriter也可以.
解决方案八:
引用6楼tcmakebest的回复:

楼主可能是在拼接XML吧,作为有规则的文本,特殊字符有它自己的编码方法,楼主试试写入双引号,尖括号也会有错误的.所以要用代码来生成,1楼写的是一种方法,还有用XmlTextWriter也可以.

使用XData写入也不正确来着
解决方案九:
作为字符串结束符,不可能出现在正文中是不可见字符,即使出现在正文中,也是看不见的(没有实际意义)如果你是在想将二进制数据(比如图片、音乐)放进XML中,那么应做base64编码
解决方案十:
是什么理由要让你写入?。。。
解决方案十一:
使用XmlDocument可以写入,不过是经过转义的,xml文件里显示的是<testxmlns=""/>。LinQ的XDocument似乎无法进行转义,而是抛出异常。XmlDocumentxmlDoc=newXmlDocument();XmlElementxmlelem=xmlDoc.CreateElement("test","");xmlDoc.AppendChild(xmlelem);xmlDoc.Save("test.xml");

解决方案十二:
引用1楼sp1234的回复:

给你写一个例子usingSystem;usingSystem.IO;usingSystem.Xml.Linq;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){varx=newXDocument();varr=newXElement("xml");x.Add(r);r.Add(newXElement("ToUserName","abcdrn1234"));r.Add(newXElement("FromUserName","defg"));r.Add(newXElement("Content",newXCData("目前还不能处理您的图片。rn怎么办?")));varstr=x.ToString();Console.WriteLine(str);Console.WriteLine();vary=XDocument.Load(newStringReader(str));Console.WriteLine("ToUserName={0}",y.Root.Element("ToUserName").Value);Console.WriteLine("按任意键结束.....");Console.ReadKey();}}}

你可以看到,内容中包含rn,根本用不着任何找麻烦的做法。

存的是:"abcdrn1234"取到的是:"abcdn1234"缺了回车符。if((r.FirstNodeasXElement).Value==y.Root.Element("ToUserName").Value){Console.WriteLine("Same");}else{Console.WriteLine("Notsame");}

时间: 2024-11-12 17:10:32

XDocument向xml文件中写入\r \n等特殊字符的问题的相关文章

XML 文件中出现 &amp;amp; ? ?

这几天在跟一个公司合作的项目中,对方提供了RSS接口,通过这个接口,在我们网站展现出来,但是对方RSS中出现了一些麻烦的字符,比如 &,®,™ 等.这些字符放到XML中,如果不做特殊处理,就会有错误产生.比如下面的XML:<item>&</item>在IE 浏览器,以及一些解析用的DOM中解析这个片段,就会产生错误.在W3C的技术规范中,也可以看到这样的字符不允许出现:http://www.w3.org/TR/2001/REC-xml-c14n-20010315比如

如何通过javascript将数据写入XML文件中?

问题描述 如何通过javascript将数据写入XML文件中? 现在想要从chrome浏览器中用javascript将数据写入xml文件中,可是差了很多资料都没有结果,所以请各位大神指点指点!!! 解决方案 浏览器的javascript只能读取和解析XML,还不能进行写操作,要是服务端的javascript可以进行写操作,

c# 如何遍历picturebox中所有动态添加的button,并将button信息写入到XML文件中

问题描述 我建了一个picturbox,上面设有7个按钮.点击任意一个按钮后,在picturebox上点击后会动态添加新的button现在想把picturebox上所有动态添加进来的所有button的坐标.大小等属性遍历出来,通过点击一个"保存"按钮写入到XML文件中,读写XML时可以还原每个动态添加的button的位置.代码应该如何写呢?我刚学不久,从网上找了很久也不知道如何写求大神帮帮忙 解决方案 本帖最后由 myj0926 于 2015-08-13 15:33:24 编辑解决方案

关于修改xml 文件中数值的问题

问题描述 关于修改xml 文件中数值的问题 10C 请问大神:如何修改xml文件中的数值为其一半,即 25,30,35.方法不限,最好有具体可执行的代码. #别的代码< void property=""exp""> < int>50 < /void> #别的代码< void property=""exp""> < int>60 < /void> #别的代码

布局-Android中不同xml文件中id可以重复么?

问题描述 Android中不同xml文件中id可以重复么? Android中如果两个layout布局文件中都有一个TextView控件,而且拥有同样的id,那样的话会乱套嘛? 比如我有a.xml,中间有控件TextView id为tv,有b.xml,中间有控件TextView id为tv,在R文件中能看到id内部类中只有一个tv常量,调用时是因为用之前是用色图ContentView设置了对应的布局所以不会混乱嘛,还是说就是会混乱的呢,我记得以前好像用的时候用混乱过,但是今天听老师讲课说是可行的,

android-位于文件夹resxml里的xml文件中的@strings不能运行

问题描述 位于文件夹resxml里的xml文件中的@strings不能运行 我使用下面的代码来获取一个 nameList. 我希望 nameList 的内容是 Inbox, Sent, Outbox 和 Draft. 但实际上 nameList 的内容是 @string/Inbox, @string/Sent, @string/Outbox 和@string/Draft.为什么啊? private void InitVar(){ ArrayList nameList=new ArrayList<

PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码_php技巧

创建文件我们用到函数 fopen ( string filename, string mode ) 参数filename为创建文件名 参数mode为以什么方式打开文件filename 其中mode可能值列表: mode 说明 'r' 只读方式打开,将文件指针指向文件头. 'r+' 读写方式打开,将文件指针指向文件头. 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建

c# 如何在XML文件中生成空元素的问题

问题描述 我在用c#开发的程序中要生成XML文件,XML文件生成后缺省的空元素在XML文件中是如下方式存储的,比如<DATA></DATA>但我们要求对空元素的存储不能换行(没办法这是要求),必须在同一行现实,比如<DATA></DATA>或者</DATA>这种方式也行,我不知道该如何设置空元素的文件存储方式,请大家指点下 解决方案 解决方案二: 十一快乐!顶解决方案三: stringfileName="Books.xml";

jsp 增加,删除,读取xml文件中指定标记的内容代码

网页特效p/jsp.html target=_blank >jsp教程 增加,删除,读取xml文件中指定标记的内容代码 package xml; import java.io.file; import java.util.list; import org.dom4j.document; import org.dom4j.documentexception; import org.dom4j.element; import org.dom4j.qname; import org.dom4j.io.