更新
请允许我解释一下我正在尝试做的事情。简单地说,我正在尝试使用xsl变换来动态生成图像。而已。现在。
这是我得到的xsl转换(注意:我还没有使用xml部分,我不知道这是否会导致问题):
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
namespace WebApplication1
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string transform = GetXsl();
string input = GetXml();
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);
}
out11.InnerHtml = sw.ToString();
}
private string GetXml()
{
return
@"<?xml version='1.0' encoding='UTF-8'?>
<catalog>
<data id='1' option1='key1' option2='0' />
<data id='2' option1='' option2='1' />
</catalog>
";
}
private string GetXsl()
{
return
@"<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<img src='<%= Class1.ImageName(""arg1"") %>' alt='alt text' />
</xsl:template>
</xsl:stylesheet>
";
}
}
}
我在前面的代码中遇到的问题是在GetXsl方法中(您可能需要向下滚动):
原始帖子
我可以在xsl中使用脚本块吗?
<xsl:template match="mytest">
Todo:
<h3>In progress...</h3>
'<%="hello-world" %>' CAN THIS WORK SOMEHOW
<span id="spnIcon" runat="server" class="fa-1x"></span>
</xsl:template>
答案 0 :(得分:0)
您可以从xsl
调用C#方法所以你可以将你想要的东西包装成C#方法然后调用它
这样做的方法是:
类似
定义命名空间
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:ext="http://XsltSampleSite.XsltFunctions/1.0">
您的C#代码
public class MyXsltExtensionFunctions
{
public const string Namespace = "http://XsltSampleSite.XsltFunctions/1.0";
public string HelloWorld()
{
return "Hello World";
}
}
xls中的
<xsl:template match="mytest">
Todo:
<h3>In progress...</h3>
<xsl:value-of select="ext:HelloWorld()" />
<span id="spnIcon" runat="server" class="fa-1x"></span>
</xsl:template>
调用转换时
XsltArgumentList xal = new XsltArgumentList();
xal.AddExtensionObject(
MyXsltExtensionFunctions.Namespace,
new MyXsltExtensionFunctions());
有关详细示例,请结帐https://www.intertech.com/Blog/calling-net-functions-from-an-xml-stylesheet/