asp.net xsl代码块,它会工作吗

时间:2017-03-24 21:41:11

标签: c# asp.net xslt

更新
请允许我解释一下我正在尝试做的事情。简单地说,我正在尝试使用xsl变换来动态生成图像。而已。现在。

所以这里是我正在尝试生成的网页的插图: enter image description here

这是我得到的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方法中(您可能需要向下滚动):

enter image description here

这是堆栈跟踪: enter image description here

原始帖子

我可以在xsl中使用脚本块吗?

<xsl:template match="mytest">
    Todo:
    <h3>In progress...</h3>

    '&lt;%="hello-world" %&gt;' CAN THIS WORK SOMEHOW

    <span id="spnIcon" runat="server" class="fa-1x"></span>  

  </xsl:template>

1 个答案:

答案 0 :(得分:0)

您可以从xsl

调用C#方法

所以你可以将你想要的东西包装成C#方法然后调用它

这样做的方法是:

  1. 声明命名空间
  2. 使用命名空间
  3. 在xsl中调用它
  4. 运行转换时 - 在类
  5. 中传递

    类似

    定义命名空间

        <?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/