首先,我用xmlTextWriter在內存中寫了一段XML,方法如下:
private byte[] GetSendByte(List<Article> returnList) { // 在內存中創建xml到字符串 using (MemoryStream fileStream = new MemoryStream()) { using (XmlTextWriter textWriter = new XmlTextWriter(fileStream, Encoding.UTF8)) { textWriter.Formatting = Formatting.Indented; textWriter.WriteStartDocument(); textWriter.WriteStartElement("Doc"); textWriter.WriteStartElement("ArrayOfArticle"); foreach (var item in returnList) { textWriter.WriteStartElement("Article"); textWriter.WriteElementString("Aid", item.Aid); textWriter.WriteElementString("ATitle", item.ATitle); textWriter.WriteElementString("ACatalog", item.ACatalog); textWriter.WriteElementString("CatalogName", item.CatalogName); textWriter.WriteElementString("AContent", item.AContent); textWriter.WriteElementString("AddTime", item.AddTime); textWriter.WriteElementString("SendTime", item.SendTime); textWriter.WriteEndElement(); } textWriter.WriteEndElement();//end ArrayOfArticle textWriter.WriteElementString("LastGetTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); textWriter.WriteEndElement();//end body textWriter.WriteEndDocument();//end Document textWriter.Close(); } return fileStream.ToArray(); } //throw new NotImplementedException(); }
把byte[]轉成string得到如下xml:
<?xml version="1.0" encoding="utf-8"?> <body> <ArrayOfArticle> <Article> <Aid>246</Aid> <ATitle>222</ATitle> <ACatalog>12</ACatalog> <CatalogName>12</CatalogName> <AContent>2222</AContent> <AddTime>2013-09-30 09:52:41</AddTime> <SendTime>2013/9/30 9:52:41</SendTime> </Article> <Article> <Aid>738</Aid> <ATitle>1111</ATitle> <ACatalog>12</ACatalog> <CatalogName>12</CatalogName> <AContent>11111</AContent> <AddTime>2013-09-30 09:52:37</AddTime> <SendTime>2013/9/30 9:52:36</SendTime> </Article> </ArrayOfArticle> <LastGetTime>2013-09-30 09:52:46</LastGetTime> </body>
字符串絕對原版,一字不差。
然后 x.LoadXml(xmlstring);
尼媽,直接給了我一個“根級別上的數據無效。 行 1,位置 1”。
仔細看了看xml,一點問題發現不了。
然后跟蹤字符串,發面里面含有“\r\n”,還有空格,猜是它們惹的禍,果斷Replace掉。結果沒有用。依然報錯。
然后各種google,
有說.net版本問的,把.net4.0改成2.0的就好。我一看,我的本來就是2.0的。
有說XML格式不對的,很明顯,這段xml看不出什么問題。
后來,看到一哥們的文章,原文很簡單,直接貼上來:
http://hi.baidu.com/xsharkx/item/d2da2935cb6995f6a88428cc
根級別上的數據無效 行1 位置1 問題解決參考 public void Parse(string xml) { this.Items=new RssItemCollection(); XmlDocument xDoc=new XmlDocument(); try { xDoc.LoadXml(xml); } catch(Exception e) { throw new Exception("內容不符合標准",e); } } 加載XML時始終 根級別上的數據無效。 行1,位置1 在網上找了很久都沒有結果 最后只有自己試試,Load前加了 xml=xml.Trim(); 通過了,但是xml前后都沒有空格之類的符號 奇怪的錯誤,而且加載的xml 在IE下是不報錯的。 不敢獨享 望給同樣經歷的人一點參考
果斷trim(),我操,行了!,而且回過頭來,看看trim()前和trim()后的內容完全一樣。
現在把問題留給大家,why???