You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在XSL中用xsl命名空间定义ENTITY?遇异常求解决

问题解决方法

你遇到的问题根源在于:DOCTYPE实体的解析时机早于XSLT命名空间的绑定,实体里的xsl前缀还没关联到XSLT的官方命名空间,所以xsltproc会抛出命名空间警告;而解析出来的<text>元素不属于XSLT命名空间,不会被当作XSLT指令执行,最终输出空的<text/>标签。

要实现插入空格的需求,推荐以下几种靠谱方式:

  • 直接用XSLT原生写法(最简单)
    放弃实体,直接在需要的位置写<xsl:text> </xsl:text>,这是XSLT标准的输出空格方式,不存在任何兼容问题。

  • 用实体定义纯文本空格
    如果一定要用实体,别在实体里包含XSLT元素,只定义空格文本:

    <!-- xq439.xsl: converts xq436.xml into xq440.txt -->
    <!DOCTYPE stylesheet [
    <!ENTITY space " ">
    ]>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         version="1.0">
    <!-- 使用时 -->
    <xsl:text>&space;</xsl:text>
    ...
    </xsl:stylesheet>
    
  • 用XSLT变量替代实体
    更符合XSLT规范的方式是定义变量,彻底避开DOCTYPE的解析问题:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         version="1.0">
    <xsl:variable name="space" select="' '"/>
    <!-- 使用方式1 -->
    <xsl:value-of select="$space"/>
    <!-- 使用方式2:包裹在xsl:text里确保空格不被压缩 -->
    <xsl:text><xsl:value-of select="$space"/></xsl:text>
    ...
    </xsl:stylesheet>
    

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:44:52