好的,我这样做是通过
来缓存内存中的文件byte[] file = System.IO.File.ReadAllBytes("test.xml");
然后我试图从那个缓冲区创建一个xml文档,如下所示:
System.IO.MemoryStream stream = new System.IO.MemoryStream(file);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(stream);
System.Xml.Linq.XDocument xPartDocument = new System.Xml.Linq.XDocument(reader);
但这无法创建具有以下异常的文档:
A first chance exception of type 'System.ArgumentException' occurred in System.Xml.Linq.dll Additional information: Non white space characters cannot be added to content.
然而'读者'只是看起来不对,即在当地人看来没有'没有'作为价值:
此外,'文件'字节数组变量有11个字节,看起来像标题(我假设这只是txt文件头?):
0x0393B148 58 35 59 71 X5Yq
0x0393B14C dc 67 01 00 Üg..
0x0393B150 ef bb bf 3c <
0x0393B154 3f 78 6d 6c ?xml
0x0393B158 20 76 65 72 ver
任何帮助都非常感激。
由于
答案 0 :(得分:6)
如注释中所述,前8个字节看起来不属于XML文件的开头。接下来的三个字节是UTF-8 BOM,很好。你应该找出那8个字节的来源,以及你是否应该总是期望它们在那里。
如果他们总是在那里并且你希望他们在那里,最简单的解决方法就是在阅读之前移动流:
MemoryStream stream = new MemoryStream(file);
stream.Position = 8;
XDocument doc = XDocument.Load(stream);
或者,不首先加载所有数据:
XDocument doc;
using (Stream input = File.OpenRead("test.xml"))
{
input.Position = 8;
doc = XDocument.Load(input);
}
答案 1 :(得分:2)
大家好,感谢大家的意见,我的问题中的二进制转储只是从'file'变量的VS内存转储窗口转储。
@Jon Skeet你实际上回答了这个问题,但事件是二进制8字节标题(或11字节与3字节UTF标题)完全没问题。
我的问题的简单答案是我正在从文本阅读器构建XDocument,而不是在其上调用静态Load函数。卫生署!