2011-06-28 23 views
3

我正在使用HTML Agility Pack解析HTML文檔,對節點進行更改,然後保存HTML文檔。我想將文檔保存到內存中,以便稍後在應用程序中將HTML寫出爲字符串。我目前的實現總是返回一個字符串==「」。我可以看到,調試時HtmlDocument對象不是空的。有人可以提供一些見解嗎?如何將HtmlDocument保存到內存? Html Agility Pack

private string InitializeHtml(HtmlDocument htmlDocument) 
    { 
     string currentUserName = User.Identity.Name; 
     HtmlNode scriptTag = htmlDocument.DocumentNode.SelectSingleNode("//script[@id ='HwInitialize']"); 
     scriptTag.InnerHtml = 
      string.Format("org.myorg.application = {{}}; org.myorg.application.init ={{uid:\"{0}\", application:\"testPortal\"}};",currentUserName); 

     MemoryStream memoryStream = new MemoryStream(); 
     htmlDocument.Save(memoryStream); 
     StreamReader streamReader = new StreamReader(memoryStream); 
     return streamReader.ReadToEnd(); 
    } 
+3

作爲一個附註,如果你想要的只是字符串,寫入['StringWriter'](http://msdn.microsoft.com/en-us/library/hs9kt2e9.aspx)會更容易的HTML。 –

+0

@Jeff - 太真了 –

回答

6

嘗試

memoryStream.Seek(0, System.IO.SeekOrigin.Begin) 

創建StreamReader並調用ReadToEnd()

流指針可能得到留在由Save方法的流結束前(最好實踐組件要做到這一點 - 如果想要追加更多的數據流)因此,當你撥打ReadToEnd,它已經在最後,沒有任何g閱讀。

+0

啊是的。我現在看到,拯救最終離開了這條河流。謝謝! – Nick

+0

我在memoryStream中遇到了不完整數據的問題。要獲取頁面的html,請直接將其寫入到StringWriter中,因爲其他評論也提到了這一點。 '使用(StringWriter sw = new StringWriter sw.Flush(); return sw.ToString(); }' –