假设我有两个字符串:
如果您必须知道,xml和xsl数据将存储在数据库列中.
如何在C#中转换XML w/o首先将xml和xsl保存为文件?我希望输出也是一个字符串(转换中的HTML).
似乎C#更喜欢通过文件进行转换.我在XslCompiledTransform中找不到Load()的字符串输入重载.所以,这就是我要问的原因.
Bil*_*zke 40
这就是我的用途.这是你的答案的组合.我投了这些灵感的答案:
string output = String.Empty;
using (StringReader srt = new StringReader(xslInput)) // xslInput is a string that contains xsl
using (StringReader sri = new StringReader(xmlInput)) // xmlInput is a string that contains xml
{
using (XmlReader xrt = XmlReader.Create(srt))
using (XmlReader xri = XmlReader.Create(sri))
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xrt);
using (StringWriter sw = new StringWriter())
using (XmlWriter xwo = XmlWriter.Create(sw, xslt.OutputSettings)) // use OutputSettings of xsl, so it can be output as HTML
{
xslt.Transform(xri, xwo);
output = sw.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:xsl中需要此语句,以便以HTML格式输出:
<xsl:output method="html" omit-xml-declaration="yes" />
Run Code Online (Sandbox Code Playgroud)
您可以从StringReader或MemoryStream进行XmlReader.Create()。XslCompileTransfrom可以从XmlReader加载()。
我花了很长时间(几年)才弄清楚如果你使用正确的习语,如何使用Stream和/或TextWriter可以使用简洁的代码.
假设transform并且input是字符串:
StringWriter sw = new StringWriter();
using (XmlReader xrt = XmlReader.Create(new StringReader(transform))
using (XmlReader xri = XmlReader.Create(new StringReader(input))
using (XmlWriter xwo = XmlWriter.Create(sw))
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xrt);
xslt.Transform(xri, xwo);
}
string output = sw.ToString();
Run Code Online (Sandbox Code Playgroud)