gpt4 book ai didi

C# 如何对内存对象执行实时 xslt 转换?

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:40 24 4
gpt4 key购买 nike

我有一个接受 2 个参数的函数:1 = XML 文件,2 = XSLT 文件,然后执行转换并返回生成的 HTML。

函数如下:

/// <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();
}

我想更改函数以不接受 XML 文件,而只接受对象。如果对象被序列化为文件,则该对象与 xslt 完全兼容。但我不想先将它序列化为一个文件。

所以回顾一下:保持 xslt 来自文件,但 xml 输入应该是我传递的对象,并且希望在没有任何文件系统交互的情况下从中生成 xml。

最佳答案

您可以将对象序列化为字符串,将字符串加载到 XmlDocument 中,然后执行转换:

public string TransformXml(object data, string xslFileName)
{

XmlSerializer xs = new XmlSerializer(data.GetType());
string xmlString;
using (StringWriter swr = new StringWriter())
{
xs.Serialize(swr, data);
xmlString = swr.ToString();
}

var xd = new XmlDocument();
xd.LoadXml(xmlString);

var xslt = new System.Xml.Xsl.XslCompiledTransform();
xslt.Load(xslFileName);
var stm = new MemoryStream();
xslt.Transform(xd, null, stm);
stm.Position = 0;
var sr = new StreamReader(stm);
return sr.ReadToEnd();
}

关于C# 如何对内存对象执行实时 xslt 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com