Я пытаюсь использовать некоторые функции C # в форме проверки XSLT, но она начала показывать некоторые ошибки, и я не смог понять, почему.
Я использую 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">
но когда я помещаю код, который объединяет msxsl:script
, который я нашел здесь https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xslt-stylesheet-scripting-using-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()
Это код 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>