为什么XML不能从字符串中读取?(但将来自相同数据的.txt)
本文关键字:将来 数据 txt 不能 XML 字符串 读取 为什么 | 更新日期: 2023-09-27 18:07:05
这是有问题的代码:
using (var file = MemoryMappedFile.OpenExisting("AIDA64_SensorValues"))
{
using (var readerz = file.CreateViewAccessor(0, 0))
{
var bytes = new byte[567];
var encoding = Encoding.ASCII;
readerz.ReadArray<byte>(0, bytes, 0, bytes.Length);
File.WriteAllText("C:''myFile.txt", encoding.GetString(bytes));
var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var reader = XmlReader.Create("C:''myFile.txt", readerSettings))
{
这就是myfile.txt的样子:
<sys><id>SCPUCLK</id><label>CPU Clock</label><value>1598</value></sys><sys><id>SCPUFSB</id><label>CPU FSB</label><value>266</value></sys><sys><id>SMEMSPEED</id><label>Memory Speed</label><value>DDR2-667</value></sys><sys><id>SFREEMEM</id><label>Free Memory</label><value>415</value></sys><sys><id>SGPU1CLK</id><label>GPU Clock</label><value>562</value></sys><sys><id>SFREELVMEM</id><label>Free Local Video Memory</label><value>229</value></sys><temp><id>TCPU</id><label>CPU</label><value>42</value></temp><temp><id>TGPU1</id><label>GPU</label><value>58</value></temp>
如果我用将数据写入硬盘驱动器上的txt文件
File.WriteAllText("C:''myFile.txt", encoding.GetString(bytes));
然后使用片段XmlReader:读取相同的文本文件
XmlReader.Create("C:''myFile.txt");
它读取得很好,程序按照预期运行并完成,但如果我直接用片段XmlReader读取,比如:
XmlReader.Create(encoding.GetString(bytes));
当在XmlReader.Create
行上运行"路径中的非法字符"时,我遇到异常。
我试着先把它写到一个单独的字符串中,然后用xmlreader读取它,但试着把它打印到CMD上看它是什么样子是没有帮助的,因为CMD不会显示我正在处理的无效字符,对吧?
但我做了Console.WriteLine(encoding.GetString(bytes));
,它与txt文件完全匹配。
那么,以某种方式将其写入文本文件是在删除一些"非法字符"吗?你们觉得怎么样?
XmlReader.Create(encoding.GetString(bytes));
XmlReader.Create()
将字符串解释为应该从中读取文件的URI。相反,将您的字节封装在StringReader
:中
StringReader sr = new StringReader(encoding.GetString(bytes));
XmlReader.Create(sr);
此处:
XmlReader.Create(encoding.GetString(bytes));
您只需调用以下方法,该方法获取一个表示文件名的字符串。然而,您将实际的XML字符串传递给它,这显然是一个无效的文件名。
如果你想从缓冲区加载阅读器,你可以使用流:
byte[] bytes = ... represents the XML bytes
using (var stream = new MemoryStream(bytes))
using (var reader = XmlReader.Create(stream))
{
...
}
以单个string
为参数的方法XmlReader.Create()
需要传递URI,而不是以字符串形式传递XML文档,请参阅MSDN。它试图打开一个名为"<…"的文件,该文件是一个无效的URI。你可以通过一条溪流。
您将xml内容传递到它期望路径的位置,错误illegal characters in path
证明了这一点
使用适当的过载,并传递流-http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx