能否在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
相关产品推荐
相关产品推荐

