Domanda

Il seguente codice funziona, ma è disordinato e lento. Sto trasformare una XDocument ad un altro utilizzando XDocument XSLT2 con Saxon, adattato con 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;
}

Mi rendo conto che la lentezza potrebbe in realtà essere nei bit non ho alcun controllo su, ma ci sono modi migliori per fare tutto la commutazione tra XDocument e XmlDocument e l'uso di scrittori?

È stato utile?

Soluzione

Invece di usare le stringhe per creare il XDocument si può provare il passaggio in un XmlWriter creato dal XDocument direttamente:

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

Oltre a questo, gli altri rallentamenti sono probabilmente nel SaxonWrapper sé ed è l'uso del XmlDocument più vecchio - piuttosto che è il cugino più veloce

.

Altri suggerimenti

eddiegroves 's soluzione va bene. Tranne che v'è un problema che lo scrittore non ottiene arrossato tutto il tempo. Per evitare che questo uso il seguente:

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

Questo assicura che l'autore è disposto - e quindi lavata -. Prima che il documento di output viene restituito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top