C#错误中的XSLT脚本问题“无法找到名为{urn:my-scripts} Expressions()的2参数函数”

时间:2019-01-15 01:18:20

标签: c# xslt xsd

我正在尝试在XSLT验证表单中使用一些C#函数,但是它开始显示一些错误,我无法弄清原因。

我使用的XSLT可以像这样正常工作:

<?xml version="1.0" encoding="UTF-8"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:regexp="http://exslt.org/regular-expressions"
              xmlns:xalan="http://xml.apache.org/xalan" 
              xmlns:xs="http://www.w3.org/2001/XMLSchema"  
              xmlns:date="http://exslt.org/dates-and-times"
              xmlns:func="http://exslt.org/functions"
              xmlns:dp="http://www.datapower.com/extensions" 
              exclude-result-prefixes="xalan gemfunc regexp date func" 
              version="1.0">

但是当我放置在这里https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xslt-stylesheet-scripting-using-msxsl-script找到的集成msxsl:script的代码时,它不起作用:

<?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:regexp="http://exslt.org/regular-expressions"
              xmlns:xalan="http://xml.apache.org/xalan" 
              xmlns:xs="http://www.w3.org/2001/XMLSchema"              
              xmlns:date="http://exslt.org/dates-and-times"
              xmlns:func="http://exslt.org/functions"
              xmlns:dp="http://www.datapower.com/extensions" 
              exclude-result-prefixes="xalan gemfunc regexp date func" 

              xmlns:msxsl="urn:schemas-microsoft-com:xslt"      
              xmlns:user="http://www.tempuri.org/User"
              version="1.0">

,它返回以下错误:

  

找不到名为{http://www.tempuri.org/User} Expressions()的2参数函数

这是我正在使用的c#代码

<msxsl:script implements-prefix="user" language="CSharp">
    <![CDATA[
        public bool Expressions(string data, string pattern) {return  Regex.IsMatch(data, pattern); }

        public int issueDate_Days(string data, string type){
          var fechaEmision=Convert.ToDateTime(data);
          var fecha=DateTime.Now;
          int dif=0;

          if(type=="seven")
            dif=Convert.ToInt32(Math.Round((fecha - fechaEmision).TotalDays));
          else
            dif =Convert.ToInt32(Math.Ceiling((fechaEmision - fecha).TotalDays));
          return  dif;
        }

        public int invoicePeriod(string stardDate, string endDate){
          var inicio=Convert.ToDateTime(stardDate);
          var fin=Convert.ToDateTime(endDate);
          var dif=(fin<inicio)?1:0;
          return  dif;
        }

        public int issueDate_Valid(string data){
          DateTime temp;
          int res =1;
          if(DateTime.TryParse(data, out temp))
          res=0;
          return res;
        }   
    ]]>
</msxsl:script>

0 个答案:

没有答案