這的確是一個2部分的問題...使用XmlReader如何在開始時重新啓動?
我有我從一個內存流創建一個XmlReader對象。我已經使用了.Read()方法幾次,現在我想回到開始處並重新開始聲明節點。我怎樣才能做到這一點?
當創建XmlReader對象時,我創建了一個XmlDocument對象和一個MemoryStream對象。在創建帶有內存流的XmlReader後,這些對象是否需要以某種方式銷燬?或者銷燬它們也會影響XmlReader對象?
這是我如何創建XmlReader對象
XmlReader xmlReader = null;
XmlDocument doc = new XmlDocument();
doc.Load(m_sXMLPath);
if (doc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
{
XmlDeclaration dec = null;
byte[] bytes = null;
MemoryStream ms = null;
dec = (XmlDeclaration)doc.FirstChild;
switch (dec.Encoding.ToLower())
{
case "utf-8":
bytes = Encoding.UTF8.GetBytes(File.ReadAllText(m_sXMLPath));
break;
case "utf-16":
bytes = Encoding.Unicode.GetBytes(File.ReadAllText(m_sXMLPath));
break;
default:
throw new XmlException("");
}
if (bytes != null)
{
ms = new MemoryStream(bytes);
xmlReader = XmlReader.Create(ms);
}
}
所以要回答我的第二個問題,我不需要對XmlDocument做任何事情,但是需要使用MemoryStream正確地做些什麼?如果我將它封裝在using語句中並在using語句中創建XmlReader對象,那麼在using語句之外引用時XmlReader對象仍然可以正常使用嗎? –
@JohnSaunders糾正。 – JNYRanger
@ArvoBowen正確。但是@JohnSaunders提到你真的不需要使用'MemoryStream'。只需打開一個TextStream到你的XML文件,並將TextStream傳遞給'XDocument.Load(stream)'或'XmlDocument.Load(stream)'函數。這個負載應該在使用塊內。和範圍一樣,你不能在塊外引用流,但是你不需要這樣做,因爲你的'XmlDocument'或'XDocument'現在包含了你的XML的全部內容。 – JNYRanger