У меня есть метод, который перебирает XML-документ, используя XMLReader
(проверяющий одновременно), извлекающий определенные фрагменты информации. Мне также нужно сжать весь документ 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
}
}
}