2014-10-27 68 views
1

爲什麼XElement.Load方法符合Stream?爲什麼XElement.Load會接受流?

我被困在這一段時間,因爲我從HTTP Web響應流解析它流,我認爲它會將字節轉換爲字符串。然而,情況並非如此,我不得不使用StringReader將流轉換爲該方法能夠正確讀取的內容。

我的原代碼,將編譯,但在運行時失敗:

Stream datastream = response.GetResponseStream(); 
var xmlResult = XElement.Load(datastream); 

上述會給指出「根元素是缺少」錯誤。這可以通過使用StringReader並傳遞它來解決。

是否有這種方法會使用流的情況?

+4

你確定'datastream'包含有效的xml嗎? – 2014-10-27 11:33:38

+0

在任何情況下,如果您正在從某種IO讀取XML(包括您發佈的示例),則會使用流。如果特定示例引發異常,則表明該響應不是有效的XML。 – 2014-10-27 11:36:58

回答

0

可能是一個編碼問題。你不能從字節解析XML。你只能從字符解析它。流的字節必須先轉換爲字符。

看來,解碼後的字符沒有根元素或根元素之前有垃圾。

我現在沒有什麼XElement.Load默認。它似乎猜測編碼(XmlTextReaderImpl.DetectEncoding)。找出你的數據有什麼編碼,並在Stream和XML框架之間分層StreamReader。設置正確的編碼。