본문 바로가기

CSharp/Development

XDocument Xsl Transform 샘플

XmlDocument Transform의 경우에는 아래와 같이 하시면 됩니다.

2009/01/13 - [CSharp/Development] - Xml Xslt Transform with C#


요즘 XDocument를 많이 사용하고 있어서 Extensions 매소드로 따로 만들어 보았습니다.

별로 어려운 부분은 없으며, 그냥 아래 코드를 참고 하시면 될 것 같습니다.


Extension Method

public static class XDocExtensions
{
	#region // static string GetTransformation(this XDocument xDoc, string strXslPath) //
	/// <summary>
	/// XDocument에 Xsl를 트랜스포메이션 한 후 해당 데이터를 반환한다.
	/// </summary>
	/// <param name="xDoc">Xml Doc</param>
	/// <param name="strXslPath">Xsl Path</param>
	/// <returns>Transform Data</returns>
	public static string GetTransformation(this XDocument xDoc, string strXslPath)
	{
		string strResult = String.Empty;
		XslCompiledTransform xsl = new XslCompiledTransform(true);
		xsl.Load(strXslPath);

		using (var ms = new MemoryStream())
		{
			XmlWriterSettings settings = new XmlWriterSettings()
			{
				ConformanceLevel = ConformanceLevel.Auto
			};

			using (var writer = XmlWriter.Create(ms, settings))
			{
				xsl.Transform(xDoc.CreateReader(), writer);

				writer.Flush();
				ms.Position = 0;

				strResult = Encoding.UTF8.GetString(ms.GetBuffer());
			}
		}

		return strResult;
	}
	#endregion
}


아래는 해당 메소드 호출 부분입니다.

XDocument doc = new XDocument(
	new XElement("Roots",
		new XElement("Item", "1")
		, new XElement("Item", "2")));

string strTransformData = String.Empty;
strTransformData = doc.GetTransformation(Server.MapPath(strXslPath));

 

이상입니다.

감사합니다.