[英]Error parsing XML string to XDocument
我有這個XML字符串bn
:
<Root><Row><ITEMNO>1</ITEMNO><USED>y</USED><PARTSOURCE>Buy</PARTSOURCE><QTY>2</QTY></Row><Row><ITEMNO>5</ITEMNO><PARTSOURCE>Buy</PARTSOURCE><QTY>5</QTY></Row></Root>
我試圖將其轉換為這樣的XDocument
:
var doc = XDocument.Parse(bn);
但是,我收到此錯誤:
Data at the root level is invalid. Line 1, position 1.
我想念什么嗎?
更新:
這是我用來創建xml字符串的方法:
public static string SerializeObjectToXml(Root rt)
{
var memoryStream = new MemoryStream();
var xmlSerializer = new XmlSerializer(typeof(Root));
var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xmlSerializer.Serialize(xmlTextWriter, rt);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
string xmlString = ByteArrayToStringUtf8(memoryStream.ToArray());
xmlTextWriter.Close();
memoryStream.Close();
memoryStream.Dispose();
return xmlString;
}
它確實增加了我必須刪除的開始。 我可以從一開始就做些改變使其正確嗎?
字符串的開頭有兩個字符,盡管您看不到它們,但它們仍然存在並會使字符串失敗。 嘗試以下方法:
<Root><Row><ITEMNO>1</ITEMNO><USED>y</USED><PARTSOURCE>Buy</PARTSOURCE><QTY>2</QTY></Row><Row><ITEMNO>5</ITEMNO><PARTSOURCE>Buy</PARTSOURCE><QTY>5</QTY></Row></Root>
有問題的人物是這個 。 這是一個字節順序的標記,基本上告訴程序讀取它的大小是大端還是小端。 似乎您是從未正確解碼的文件中復制並粘貼了此文件。
要刪除它,可以使用以下命令:
yourString.Replace(((char)0xFEFF).ToString(), "")
字符串的開頭有兩個不可打印的字符( 零寬度不間斷空格 )。
XML不允許在root元素之外的文本。
可接受的答案會進行不必要的string
處理,但是,在它的辯護中,這是因為您不必處理不必要的string
。 .NET XML API的一大優點是它們具有可靠的內部結構。 因此, XDocument.Parse
嘗試將string
輸入XDocument.Parse
, XDocument.Parse
將Stream
或某種類型的TextReader
輸入XDocument.Load
。 這樣,您就不會因為手動管理編碼及其帶來的任何問題而感到愚蠢,因為內部結構將為您處理所有這些事情。 字節序標記令人不安,但是如果您使用XML進行處理,.NET使其更易於處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.