XDocument XSLT에 XDocument 최적화
문제
다음 코드는 작동하지만 지저분하고 느립니다. SaxonWrapper를 사용하여 조정 된 색소폰으로 XSLT2를 사용하여 XDocument를 다른 XDocument로 변환하고 있습니다.
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를 만들지 않고 XDocument에서 직접 생성 된 XMLWriter를 통과시킬 수 있습니다.
XDocument outputDoc = new XDocument();
processor.Transform(sourceDoc, outputDoc.CreateWriter());
return outputDoc;
그 외에 다른 속도는 아마도 색소폰 자체에있을 것입니다. 그리고 그것은 더 빠른 사촌보다는 오래된 xmldocument를 사용하고 있습니다.
다른 팁
에디 그 로브스솔루션은 괜찮습니다. 작가가 항상 플러시되지 않는다는 문제가 제외하고. 이를 방지하려면 다음을 사용합니다.
XDocument outputDoc = new XDocument();
using (var writer = outputDoc.CreateWriter()) {
processor.Transform(sourceDoc, writer);
}
return outputDoc;
이렇게하면 출력 문서가 반환되기 전에 작가가 배치되어 플러시되어 있습니다.
제휴하지 않습니다 StackOverflow