특정 정보를 추출하여 XMLReader
(동시에 유효성 검사)을 사용하여 XML 문서를 반복하는 방법이 있습니다. 또한 을 전체 XML 문서를 데이터베이스에 저장하기위한 준비로 압축해야합니다. 이 작업을 수행해야하는 코드는 다음과 같습니다. (전체 XmlReader
을 StreamWriter.Write()
으로 전달) 이것을 달성하는 가장 효과적인 방법은 무엇입니까? 동일한 결과를 얻기 위해 while(validatingReader.Read())
루프를 사용하는 명확한 방법을 찾지 못했습니다.XMLReader.Read() 중 XML 압축
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
}
}
}
압축 결과는 5Mb 미만입니다. 나는 이것이 MemoryStream에 대해 받아 들일 만하다고 생각 하는가? 특정 XML 요소 컨텐츠를 추출 할 수있는 동안 독자 컨텐츠를 다른 스트림에 작성할 수있는 방법이 있습니까? –
MemoryStream은 임의의 크기를 처리 할 수 있습니다. 문제가 충분히 빠르면 문제가됩니다. 문제는 MemoryStream이 커지면서 이전에 새로 할당 된 배열에 내용을 복사해야한다는 것입니다. 빠르지 않을 수도 있습니다. 이렇게하면 많은 시간 (~ 1MB +)의 스트림에서 측정 할 수 있습니다. –
나는 동시에 엘리먼트를 스트리밍하고 추출하기 위해 독자의 컨텐트를 작성하는 쉬운 방법을 모른다. –