سؤال

يعمل الكود التالي ولكنه فوضوي وبطيء. أنا تحويل XDocument إلى XDocument آخر باستخدام XSLT2 مع سكسون، مكيفة باستخدام 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;
}

أدرك أن البطء قد يكون في الواقع في البتات ليس لدي أي سيطرة ولكن هل هناك طرق أفضل للقيام بكل التبديل بين xdocument و xmldocument واستخدام الكتاب؟

هل كانت مفيدة؟

المحلول

بدلا من استخدام السلاسل لإنشاء XDocument، يمكنك محاولة المرور في XMLWriter تم إنشاؤه من XDocument مباشرة:

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

بخلاف ذلك، من المحتمل أن تكون التبطير الأخرى في Saxonwrapper نفسها واستخدمها من XmLDocument الأقدم - بدلا من ابن عمه السريع.

نصائح أخرى

eddiegroves.حل جيد. إلا أن هناك مشكلة في أن الكاتب لا يتم مسحه طوال الوقت. لمنع هذا استخدام ما يلي:

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

يضمن هذا أن الكاتب يتم التخلص منه - وبالتالي مسح - قبل إرجاع مستند الإخراج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top