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中的扩展名和名称空间,如下所示: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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<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 " "> ]>
<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)。有关解释和可能的解决方案,请参见我的答案。