문제

다음 코드는 작동하지만 지저분하고 느립니다. 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;

이렇게하면 출력 문서가 반환되기 전에 작가가 배치되어 플러시되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top