Ich habe eine Funktion, die 2 Parameter dauert: 1 = XML-Datei, 2 = XSLT-Datei, führt dann eine Umwandlung durch und gibt das resultierende HTML zurück. HierC# Wie führe ich eine Live-XSLT-Transformation für ein In-Memory-Objekt durch?
ist die Funktion:
/// <summary>
/// Will apply an XSLT style to any XML file and return the rendered HTML.
/// </summary>
/// <param name="xmlFileName">
/// The file name of the XML document.
/// </param>
/// <param name="xslFileName">
/// The file name of the XSL document.
/// </param>
/// <returns>
/// The rendered HTML.
/// </returns>
public string TransformXml(string xmlFileName, string xslFileName)
{
var xtr = new XmlTextReader(xmlFileName)
{
WhitespaceHandling = WhitespaceHandling.None
};
var xd = new XmlDocument();
xd.Load(xtr);
var xslt = new System.Xml.Xsl.XslCompiledTransform();
xslt.Load(xslFileName);
var stm = new MemoryStream();
xslt.Transform(xd, null, stm);
stm.Position = 1;
var sr = new StreamReader(stm);
xtr.Close();
return sr.ReadToEnd();
}
Ich mag die Funktion nicht ändern, eine Datei für die XML zu akzeptieren, sondern nur ein Objekt. Das Objekt ist genau mit dem XSLT kompatibel, wenn es in Datei serialisiert wurde. Aber ich möchte es nicht zuerst in eine Datei serialisieren müssen.
Also zusammenfassend: Behalte das xslt aus einer Datei, aber die XML-Eingabe sollte ein Objekt, das ich übergeben und möchte das XML aus ohne Dateisysteminteraktion generieren.
Ich habe das gerade benutzt, muss aber darauf hinweisen, dass ich 'Position' in' = 0' ändern musste . Ansonsten hat es wie erwartet funktioniert. =) – Dracorat