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

时间:2011-07-13 11:22:31

标签: xslt namespaces exslt

exclude-result-prefixesextension-element-prefix之间的区别是什么?两者都用在XSLT的头文件中。我在使用EXSLT时找到extension-element-prefix,而EXSLT website 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>

我的输出与libxslt(xsltproc):

<?xml version="1.0"?>
<blabla xmlns:exsl="http://exslt.org/common"/>

1 个答案:

答案 0 :(得分:12)

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

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