XSLT 命名空间声明中的排除结果前缀和扩展元素前缀有什么区别?
exclude-result-prefixes
和 extension-element-prefix
之间有什么区别?两者都用在 XSLT 的标头中。我在使用 EXSLT 和 EXSLT 网站时发现了 extension-element-prefix
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"/>
What's the difference between exclude-result-prefixes
and extension-element-prefix
? Both are used in the header of XSLTs. I've found extension-element-prefix
while using EXSLT and the EXSLT website Howto says that extension-element-prefix
is used for "prevent the extension namespaces from being output in the result tree".
But this is not true (using libxslt). Only exclude-result-prefixes
removes the extension namespace. So why do I need extension-element-prefix
???
Sample:
<?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>
My output with libxslt (xsltproc):
<?xml version="1.0"?>
<blabla xmlns:exsl="http://exslt.org/common"/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要使用类似于命名空间
http://exslt.org/common
中的 EXSLT 函数,您不需要extension-element-prefix
属性。仅当您想在命名空间http://exslt.org/functions
中使用诸如func:function
之类的扩展元素时才需要这样做。extension-element-prefix
属性只是表示带有该前缀的任何元素都不是文字结果元素,而是除 XSLT 语言定义的指令之外的扩展指令。至于
exclude-result-prefixes
,您已经理解了,它有助于避免在结果元素上声明任何名称空间,因为在样式表中声明和使用的名称空间仅用于选择路径表达式中的节点或匹配模式或用于插入扩展元素。To use EXSLT functions like the one in the namespace
http://exslt.org/common
you don't need theextension-element-prefix
attribute. That is only need if you want to use extension elements likefunc:function
in the namespacehttp://exslt.org/functions
. Theextension-element-prefix
attribute simply signals that any elements with that prefix are not literals result elements but rather extension instructions in addition to those instructions defined by the XSLT language.As for
exclude-result-prefixes
, you have understood that right, it helps avoiding any namespace declarations on your result elements for namespaces declared and used in the stylesheet solely to select nodes in path expressions or match patterns or used to insert extension elements.