xslt - XSLT 命名空间声明中的排除结果前缀和扩展元素前缀有什么区别?

标签 xslt namespaces exslt

exclude-result-prefixesextension-element-prefix 之间有什么区别?两者都用在 XSLT 的 header 中。我在使用 EXSLT 和 EXSLT website Howto 时发现了 extension-element-prefixextension-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/

相关文章:

c# - XSL 填充到最长字段长度

xml - 使用 XSLT 1.0 从字符串中提取数字 (+int/decimal)

xml - 不匹配的子元素也出现在 XSL 模板下

xml - 复制 XSLT 变量

python - 撤消 Python 内置的覆盖

xml - 连接 XML

xslt - 使用 XSL 从 CDATA 转换 XML

PHP - 未找到命名空间,使用 Composer 自动加载项目

c# - 在任何命名空间之外定义 C# 类

c# - 加载外部 XSLT 时发生异常