Umbraco和EXSLT集不工作

Umbraco和EXSLT集不工作,xslt,umbraco,exslt,Xslt,Umbraco,Exslt,我正在使用Umbraco 4.5.2创建一些xslt,我想从EXSLT.org添加de set:distinct函数(http://www.exslt.org/set/functions/distinct/index.html)但是,当我引用set:distinct时,我得到错误: System.Xml.Xsl.Xsl异常: 找不到脚本或扩展名 与命名空间关联的对象 'http://exslt.org/sets" 我添加了文件、xslt中的扩展名和名称空间,如下所示: <?xml vers

我正在使用Umbraco 4.5.2创建一些xslt,我想从EXSLT.org添加de set:distinct函数(http://www.exslt.org/set/functions/distinct/index.html)但是,当我引用set:distinct时,我得到错误:

System.Xml.Xsl.Xsl异常: 找不到脚本或扩展名 与命名空间关联的对象 'http://exslt.org/sets"

我添加了文件、xslt中的扩展名和名称空间,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:exsl="http://exslt.org/functions"
    xmlns:set="http://exslt.org/sets" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="exsl msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:import href="set.xsl" />
xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"

是我遗漏了什么,还是Umbraco抛出了错误,或者某个地方发生了一些底层网络错误(如果是,我如何发现)


蒂亚

EXSLT不是由两个.NET XSLT处理器本机实现的:XslCompiledTransform和(过时的)XslTransform

有针对.NET的EXSLT的第三方实现,例如MVPXML项目中的实现。您需要从获取它,并将其安装到执行XSLT转换的系统上


您也可以始终使用纯XSLT 1.0(XSLT标记中有很多很多问题,其中的答案演示了Muenchian分组)如果您的xslt代码应该是可移植的,以便与尽可能多的兼容xslt 1.0处理器一起运行,这是最好的选择。

Umbraco框架已经包含了Exslt.Sets实现,因此您不需要像上面那样添加对它的进一步引用。您可以在上面的代码中看到对Umbraco实现的引用,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:exsl="http://exslt.org/functions"
    xmlns:set="http://exslt.org/sets" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="exsl msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:import href="set.xsl" />
xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
删除以下行:

xmlns:exsl="http://exslt.org/functions"
xmlns:set="http://exslt.org/sets" 
并使用Exslt.ExsltSets:distinct()。

好问题(+1)。有关解释和可能的解决方案,请参见我的答案。