Question de débutant XSLT : veuillez remplir le champ vide dans le fragment de code C# ci-dessous :
public static string TransformXMLToHTML(string inputXml, string xsltString) {
// insert code here to apply the transform specified by xsltString to inputXml
// and return the resultant HTML string.
// You may assume that the xslt output type is HTML.
}
Merci!
2 réponses
Que diriez-vous:
public static string TransformXMLToHTML(string inputXml, string xsltString)
{
XslCompiledTransform transform = new XslCompiledTransform();
using(XmlReader reader = XmlReader.Create(new StringReader(xsltString))) {
transform.Load(reader);
}
StringWriter results = new StringWriter();
using(XmlReader reader = XmlReader.Create(new StringReader(inputXml))) {
transform.Transform(reader, null, results);
}
return results.ToString();
}
Notez qu'idéalement, vous devriez mettre en cache et réutiliser le XslCompiledTransform
- ou peut-être utiliser XslTransform
à la place (cependant, il est marqué comme obsolète).
Pour le fun, une version un peu moins élégante qui implémente la mise en cache suggérée par Marc :
public static string TransformXMLToHTML(string inputXml, string xsltString)
{
XslCompiledTransform transform = GetAndCacheTransform(xsltString);
StringWriter results = new StringWriter();
using (XmlReader reader = XmlReader.Create(new StringReader(inputXml)))
{
transform.Transform(reader, null, results);
}
return results.ToString();
}
private static Dictionary<String, XslCompiledTransform> cachedTransforms = new Dictionary<string, XslCompiledTransform>();
private static XslCompiledTransform GetAndCacheTransform(String xslt)
{
XslCompiledTransform transform;
if (!cachedTransforms.TryGetValue(xslt, out transform))
{
transform = new XslCompiledTransform();
using (XmlReader reader = XmlReader.Create(new StringReader(xslt)))
{
transform.Load(reader);
}
cachedTransforms.Add(xslt, transform);
}
return transform;
}
Questions connexes
Questions liées
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.