[英]Compress XML during XMLReader.Read()
我有一種方法,該方法使用XMLReader
(同時進行驗證)循環提取一個特定的信息,從而遍歷XML文檔。 我還需要壓縮整個XML文檔,以准備將其存儲在數據庫中。 我要做的代碼如下。 這 (將整個XmlReader
傳遞給StreamWriter.Write()
) 是實現此目標的適當/最有效的方法嗎? 我沒有找到一種清晰的方法來使用while(validatingReader.Read())
循環來達到相同的結果。
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("schemaNamespace", "schemaLocation");
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.Schemas.Add(schemaSet);
readerSettings.ValidationEventHandler
+= new ValidationEventHandler(XMLValidationError);
using (XmlReader documentReader = requestXML.CreateNavigator().ReadSubtree())
{
using (XmlReader validatingReader =
XmlReader.Create(documentReader, readerSettings))
{
using (MemoryStream output = new MemoryStream())
{
using (DeflateStream gzip =
new DeflateStream(output, CompressionMode.Compress))
{
using (StreamWriter writer =
new StreamWriter(gzip, System.Text.Encoding.UTF8))
{
writer.Write(validatingReader);
this.compressedXMLRequest
= Encoding.UTF8.GetString(output.ToArray());
}
}
}
while (validatingReader.Read())
{
// extract specific element contents
}
}
}
壓縮部分看起來不錯。 對於大型文檔,MemoryStream可能不是最佳選擇,但是在更改之前,請檢查性能是否適合您的方案。
“提取特定元素”部分將不會讀取任何內容,因為閱讀器僅處於轉發狀態,因此在執行該部分時已讀取所有內容。 您可能需要重新創建閱讀器。
備查:
問題中的代碼無法正常工作。 將XmlReader
傳遞給StreamWriter
不能正常工作。 最后,我並沒有最終以這種方式將壓縮與驗證相結合,因此我沒有確切的“正確”代碼來顯示此信息,但不想懸而未決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.