C#에서 XSLT 스타일시트를 적용하는 방법
저는 XSLT 스타일시트를 C#을 이용하여 XML Document에 적용하고 출력물을 파일에 쓰고 싶습니다.
여기서 가능한 답을 찾았습니다. http://web.archive.org/web/20130329123237/http ://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63
기사의 내용:
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslTransform myXslTrans = new XslTransform() ;
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null) ;
myXslTrans.Transform(myXPathDoc,null,myWriter) ;
편집:
하지만 내 믿음직한 컴파일러가 말하길XslTransform
is old: UseXslCompiledTransform
대신:
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);
Daren의 훌륭한 답변을 바탕으로, 이 코드는 적절한 XslCompiled Transform을 사용함으로써 크게 단축될 수 있습니다.오버로드 변환:
var myXslTrans = new XslCompiledTransform();
myXslTrans.Load("stylesheet.xsl");
myXslTrans.Transform("source.xml", "result.html");
(이것을 답으로 제시해서 미안하지만,code block
댓글에 대한 지원은 다소 제한적입니다.)
VB.NET에서는 다음과 같은 변수도 필요 없습니다.
With New XslCompiledTransform()
.Load("stylesheet.xsl")
.Transform("source.xml", "result.html")
End With
MSDN의 C#에서 XSL 변환을 수행하는 방법에 대한 자습서는 다음과 같습니다.
http://support.microsoft.com/kb/307322/en-us/
파일을 작성하는 방법은 다음과 같습니다.
http://support.microsoft.com/kb/816149/en-us
참고 사항: 검증 작업도 함께 수행하려면 여기에 다른 튜토리얼이 있습니다(DTD, XDR 및 XSD(= schema)).
http://support.microsoft.com/kb/307379/en-us/
좀 더 많은 정보를 제공하기 위해서 추가한 것입니다.
이것이 당신에게 도움이 될 것입니다.
public static string TransformDocument(string doc, string stylesheetPath)
{
Func<string,XmlDocument> GetXmlDocument = (xmlContent) =>
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlContent);
return xmlDocument;
};
try
{
var document = GetXmlDocument(doc);
var style = GetXmlDocument(File.ReadAllText(stylesheetPath));
System.Xml.Xsl.XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();
transform.Load(style); // compiled stylesheet
System.IO.StringWriter writer = new System.IO.StringWriter();
XmlReader xmlReadB = new XmlTextReader(new StringReader(document.DocumentElement.OuterXml));
transform.Transform(xmlReadB, null, writer);
return writer.ToString();
}
catch (Exception ex)
{
throw ex;
}
}
데이터베이스에서 읽고 XSLT를 사용하여 변환하는 이 작은 코드 조각을 공유하고자 합니다.위에 저도 써본 적이 있습니다.xslt-extensions
다른 사람들과 별 차이가 없는 거죠
참고: 이것은 단지 초안 코드일 뿐이며, 생산에 사용하기 전에 정리가 필요할 수 있습니다.
var schema = XDocument.Load(XsltPath);
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
using (var command = new SqlCommand(Sql, connection))
{
var reader = command.ExecuteReader();
var dt = new DataTable(SourceNode);
dt.Load(reader);
string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine;
using (var stringWriter = new StringWriter())
{
dt.WriteXml(stringWriter, true);
xml += stringWriter.GetStringBuilder().ToString();
}
XDocument transformedXml = new XDocument();
var xsltArgumentList = new XsltArgumentList();
xsltArgumentList.AddExtensionObject("urn:xslt-extensions", new XsltExtensions());
using (XmlWriter writer = transformedXml.CreateWriter())
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(schema.CreateReader());
xslt.Transform(XmlReader.Create(new StringReader(xml)), xsltArgumentList, writer);
}
var result = transformedXml.ToString();
}
}
XsltPath
는 xslt 파일의 경로입니다.
ConnectionString
constant가 데이터베이스를 가리키고 있습니다.
Sql
당신의 질문입니다.
SourceNode
소스 xml의 각 레코드의 노드입니다.
흥미로운 부분은 다음의 사용법을 주목해 주시기 바랍니다.urn:xslt-extensions
그리고.new XsltExtensions()
위와 같은 암호로xslt에서는 불가능할 수도 있는 복잡한 계산이 필요하다면 이것을 사용할 수 있습니다.다음은 날짜 형식을 지정하는 간단한 방법입니다.
public class XsltExtensions
{
public string FormatDate(string dateString, string format)
{
DateTime date;
if (DateTime.TryParse(dateString, out date))
return date.ToString(format);
return dateString;
}
}
XSLT 파일에서는 아래와 같이 사용할 수 있습니다.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="urn:xslt-extensions">
...
<myTag><xsl:value-of select="ext:FormatDate(record_date, 'yyyy-MM-dd')"/></myTag>
...
</xsl:stylesheet>
언급URL : https://stackoverflow.com/questions/34093/how-to-apply-an-xslt-stylesheet-in-c-sharp
'programing' 카테고리의 다른 글
Npm install에서 경고가 표시되고 npm 감사 수정이 작동하지 않음 (0) | 2023.09.23 |
---|---|
$location으로 AngularJS url 변경 (0) | 2023.09.23 |
모든 레코드를 반환하는 탄력적 검색 쿼리 (0) | 2023.09.23 |
스키마 정의와 스키마 정의의 차이? (0) | 2023.09.23 |
nodejs에서 senecajs(micros 서비스 툴킷)를 사용하여 mariadb에 질문 배열을 삽입하는 방법? (0) | 2023.09.23 |