XSLT名称空间声明中的exclude-result-prefixes和extension-element-prefix有什么区别?

the*_*arv 18 xslt namespaces exslt

exclude-result-prefixes和之间有什么区别extension-element-prefix?两者都用在XSLT的头文件中.我发现extension-element-prefix在使用EXSLT和EXSLT网站时Howto说它extension-element-prefix用于"阻止扩展命名空间在结果树中输出".

事实并非如此(使用libxslt).仅exclude-result-prefixes删除扩展名称空间.那么我为什么需要extension-element-prefix???

样品:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common" version="1.0"
  extension-element-prefix="exsl">

<xsl:template match="/">
  <blabla/>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

我的输出与libxslt(xsltproc):

<?xml version="1.0"?>
<blabla xmlns:exsl="http://exslt.org/common"/>
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 12

要使用类似命名空间中的EXSLT函数,http://exslt.org/common您不需要该extension-element-prefix属性.只有在想要使用func:function命名空间中的扩展元素时才需要这样做http://exslt.org/functions.该extension-element-prefix属性仅表示具有该前缀的任何元素不是文字结果元素,而是除了由XSLT语言定义的那些指令之外的扩展指令.

至于exclude-result-prefixes你已经明白了,它有助于避免对结果元素的任何名称空间声明,因为在样式表中声明和使用的名称空间只能选择路径表达式中的节点或匹配模式或用于插入扩展元素.