簡體   English   中英

將XML字符串解析為XDocument時出錯

[英]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.ParseXDocument.ParseStream或某種類型的TextReader輸入XDocument.Load 這樣,您就不會因為手動管理編碼及其帶來的任何問題而感到愚蠢,因為內部結構將為您處理所有這些事情。 字節序標記令人不安,但是如果您使用XML進行處理,.NET使其更易於處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM