Frage

Der folgende Code funktioniert, aber ist etwas chaotisch und langsam. Ich bin ein XDocument zu einem anderen XDocument Umwandlung mit XSLT2 mit Saxon, angepasst mit 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;
}

Ich weiß, dass die Langsamkeit tatsächlich in den Bits sein könnte ich keine Kontrolle darüber haben, aber es gibt bessere Möglichkeiten, um alle das Umschalten zwischen XDocument und XmlDocument und Nutzung von Schriftstellern zu tun?

War es hilfreich?

Lösung

Anstatt Strings mit dem XDocument zu erstellen, können Sie versuchen in einem XmlWriter aus dem XDocument erstellt vorbei direkt:

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

Other than that, sind die anderen Verlangsamungen wahrscheinlich im SaxonWrapper selbst und es ist die Verwendung der älteren XmlDocument - anstatt es raschere Vetter

.

Andere Tipps

eddiegroves 's Lösung ist in Ordnung. Außer es ist ein Problem, dass der Schriftsteller nicht gespült ganze Zeit bekommt. Um dies zu verhindern Verwendung der folgende:

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

Dies stellt sicher, daß der Schreiber angeordnet ist - und damit gespült -., Bevor das Ausgabedokument zurückgegeben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top