Pergunta

As seguintes obras de código, mas é confuso e lento. Estou transformando um XDocument para outro XDocument usando XSLT2 com o Saxon, adaptado usando SaxonWrapper:

public static XDocument HSRTransform(XDocument source)
{
    System.Reflection.Assembly thisExe = System.Reflection.Assembly.GetExecutingAssembly();
    System.IO.Stream xslfile = thisExe.GetManifestResourceStream("C2KDataTransform.Resources.hsr.xsl");

    XmlDocument xslDoc = new XmlDocument();
    xslDoc.Load(xslfile);

    XmlDocument sourceDoc = new XmlDocument();
    sourceDoc.Load(source.CreateReader());

    var sw = new StringWriter();

    Xsl2Processor processor = new Xsl2Processor();
    processor.Load(xslDoc);

    processor.Transform(sourceDoc, new XmlTextWriter(sw));

    XDocument outputDoc = XDocument.Parse(sw.ToString());
    return outputDoc;
}

Eu percebo que a lentidão pode ser realmente nos bits tenho nenhum controle sobre, mas existem melhores maneiras de fazer toda a comutação entre XDocument e XmlDocument e uso de escritores?

Foi útil?

Solução

Ao invés de usar cordas para criar o XDocument você pode tentar passar em um XmlWriter criado a partir da XDocument directamente:

XDocument outputDoc = new XDocument();
processor.Transform(sourceDoc, outputDoc.CreateWriter());
return outputDoc;

Além disso, as outras desacelerações são, provavelmente, no próprio SaxonWrapper e do uso do XmlDocument mais velhos - em vez do que primo mais rápido

.

Outras dicas

eddiegroves 's solução é bom. Exceto que não é um problema que o escritor não se corou o tempo todo. Para evitar isso, use o seguinte:

XDocument outputDoc = new XDocument();
using (var writer = outputDoc.CreateWriter()) {
    processor.Transform(sourceDoc, writer);
}
return outputDoc;

Isso garante que o escritor está disposto - e, portanto, corada -. Antes do documento de saída é retornado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top