exclude-result-prefixes
和 extension-element-prefix
之间有什么区别?两者都用在 XSLT 的 header 中。我在使用 EXSLT 和 EXSLT website Howto 时发现了 extension-element-prefix
说 extension-element-prefix
用于“防止扩展 namespace 在结果树中输出”。
但是这不是真的(使用 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"/>
最佳答案
要使用诸如 http://exslt.org/common
命名空间中的 EXSLT 函数,您不需要 extension-element-prefix
属性。仅当您想在命名空间 http://exslt.org/functions
中使用诸如 func:function
之类的扩展元素时才需要这样做。 extension-element-prefix
属性只是表示带有该前缀的任何元素都不是文字结果元素,而是除 XSLT 语言定义的指令之外的扩展指令。
至于 exclude-result-prefixes
,您已经理解了,它有助于避免在结果元素上声明任何 namespace ,因为在样式表中声明和使用的 namespace 仅用于选择路径表达式中的节点或匹配模式或用于插入扩展元素。
关于xslt - XSLT 命名空间声明中的排除结果前缀和扩展元素前缀有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678085/