تحسين XDocument إلى XDocument XSLT
سؤال
يعمل الكود التالي ولكنه فوضوي وبطيء. أنا تحويل 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;
يضمن هذا أن الكاتب يتم التخلص منه - وبالتالي مسح - قبل إرجاع مستند الإخراج.
لا تنتمي إلى StackOverflow