Overview : XML과 XSLT를 모두 메모리 내에서 빠르게 처리하는 예제입니다. 이 예제에서는 XslCompiledTransform을 사용하여 XSLT를 미리 컴파일한 후, StringReader와 StringWriter를 사용해 메모리 스트림에서 읽고 쓰도록 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
using System; using System.IO; using System.Xml; using System.Xml.Xsl; class Program { static void Main() { // XML 입력 (메모리 내 문자열) string combinedResponse = "여기에 실제 XML 데이터가 들어갑니다."; string dpwXml = $"<DATA>{combinedResponse}</DATA>"; string Notice = "Note"; string TR = "OK"; string Hide ="Y"; string ID ="ID223"; // XSLT 파일 경로 (서버상의 파일 경로) string xsltFilePath = "~/XslTemplates/transform.xslt"; // 변환 결과를 저장할 변수 string transformedContent = string.Empty; // XML을 메모리 내에서 읽기 위한 XmlReader 생성 using (StringReader xmlStringReader = new StringReader(dpwXml)) using (XmlReader xmlReader = XmlReader.Create(xmlStringReader)) { // XSLT 로드 (스크립트 및 document() 함수 활성화) XsltSettings xsltSettings = new XsltSettings(enableDocumentFunction: true, enableScript: true); XslCompiledTransform xslt = new XslCompiledTransform(); // 파일에서 XSLT를 읽어들임 (서버 맵핑을 통해 실제 경로 사용) string xsltFullPath = System.Web.HttpContext.Current.Server.MapPath(xsltFilePath); xslt.Load(xsltFullPath, xsltSettings, new XmlUrlResolver()); // XSLT 인자 설정 XsltArgumentList xslArg = new XsltArgumentList(); xslArg.AddParam("Notice", "", Notice); xslArg.AddParam("TR", "", TR); xslArg.AddParam("Hide", "", Hide); xslArg.AddParam("ID", "", ID); // 결과를 메모리 내 StringWriter에 출력 using (StringWriter sw = new StringWriter()) using (XmlWriter resultWriter = XmlWriter.Create(sw, xslt.OutputSettings)) { xslt.Transform(xmlReader, xslArg, resultWriter); transformedContent = sw.ToString(); } } // 결과 출력 혹은 후속 처리 Console.WriteLine(transformedContent); } } |