XSLTテンプレートに関するさまざまなWebサイトのドキュメントをたくさん読んでいても、C#コードでXSLTを動作させることはできません。ここでXSLTテンプレートが動作しない
は私の作業XSLTファイルである:ここで
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="2">
<TR>
<TD>First name</TD>
<TD>Last name</TD>
<TD>Age</TD>
</TR>
<xsl:for-each select="ArrayOfUserModel/UserModel">
<TR>
<TD><xsl:value-of select="FirstName"/></TD>
<TD><xsl:value-of select="LastName"/></TD>
<TD><xsl:value-of select="Age"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
は私の非作業XSLTファイル(および処理は理論的には同じことを返すのではなくすべきスタイルシートの末尾にテンプレートに移動されましたです)任意のユーザ情報を表示します。ここでは
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="2">
<TR>
<TD>First name</TD>
<TD>Last name</TD>
<TD>Age</TD>
</TR>
<xsl:for-each select="ArrayOfUserModel/UserModel">
<xsl:apply-templates select="user"/>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="user">
<TR>
<TD><xsl:value-of select="FirstName"/></TD>
<TD><xsl:value-of select="LastName"/></TD>
<TD><xsl:value-of select="Age"/></TD>
</TR>
</xsl:template>
</xsl:stylesheet>
私はXSLT変換に使用するC#コード: (私はいくつかのプロパティを含む直列化可能UserModelオブジェクト、およびXSLTファイルの内容を渡し、それはHTMLを返します)
public static string TransformXml2(object data, string xslt)
{
XmlSerializer xs = new XmlSerializer(data.GetType());
string xml;
using (StringWriter swr = new StringWriter())
{
xs.Serialize(swr, data);
xml = swr.ToString();
}
// Simple data checks
if (string.IsNullOrEmpty(xml))
{
throw new ArgumentException("Param cannot be null or empty", "xml");
}
if (string.IsNullOrEmpty(xslt))
{
throw new ArgumentException("Param cannot be null or empty", "xslt");
}
// Create required readers for working with xml and xslt
StringReader xsltInput = new StringReader(xslt);
StringReader xmlInput = new StringReader(xml);
XmlTextReader xsltReader = new XmlTextReader(xsltInput);
XmlTextReader xmlReader = new XmlTextReader(xmlInput);
// Create required writer for output
StringWriter stringWriter = new StringWriter();
XmlTextWriter transformedXml = new XmlTextWriter(stringWriter);
// Create a XslCompiledTransform to perform transformation
XslCompiledTransform xsltTransform = new XslCompiledTransform();
try
{
xsltTransform.Load(xsltReader, new XsltSettings(true, true), null);
xsltTransform.Transform(xmlReader, transformedXml);
}
catch (XmlException xmlEx)
{
// TODO : log - "Could not load XSL transform: \n\n" + xmlEx.Message
throw;
}
catch (XsltException xsltEx)
{
// TODO : log - "Could not process the XSL: \n\n" + xsltEx.Message + "\nOn line " + xsltEx.LineNumber + " @ " + xsltEx.LinePosition)
throw;
}
catch (Exception ex)
{
// TODO : log
throw;
}
return stringWriter.ToString();
}
ありがとうございます!
おかげでマルクGravell、。 – virrea
私はusermodel.xslファイルをメインのXSLファイルと同じローカルフォルダにあるを使用しようとしていますが、VC#は次のように言います。フランス語で禁止されています。無関係な質問のように聞こえる@virrea ... –
virrea
...? –