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

如何用XSLT生成类似span的内联自定义g标签?

解决XSLT生成自定义<g>元素时多余空格的问题

问题原因

你遇到的情况是因为Saxon的HTML输出模式会依据标准HTML元素的默认表现来格式化输出:<span>是W3C规范定义的内联元素,处理器会紧凑输出它;而<g>是自定义元素,处理器默认将其识别为块级元素,因此自动添加了换行和缩进空格,这些空格会在网页中被渲染为空白。

解决方案

这里提供三种可行的解决方式,你可以根据需求选择:

1. 利用Saxon扩展属性标记<g>为内联元素

Saxon支持扩展属性saxon:inline,可以直接指定自定义元素按内联方式输出,无需修改整体输出规则:

  • 首先在样式表中声明Saxon命名空间:xmlns:saxon="http://saxon.sf.net/"
  • 在生成<g>元素时添加saxon:inline="yes"属性

修改后的XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:n="http://www.tei-c.org/ns/1.0"
                xmlns:saxon="http://saxon.sf.net/"
                exclude-result-prefixes="n saxon"
>
    <xsl:output encoding="UTF-8" method="html"/>
    <xsl:template match="/n:TEI/n:text/n:body">
        <html>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="n:g">
        <xsl:element name="g" saxon:inline="yes">
            <xsl:attribute name="type">
                <xsl:text>gaiji</xsl:text>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
        <xsl:element name="span">
            <xsl:attribute name="class">
                <xsl:text>gaiji</xsl:text>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="text()">
        <xsl:value-of select="normalize-space(.)"/>
    </xsl:template>
</xsl:stylesheet>

2. 切换为XHTML输出方法

将输出方法从html改为xhtml,XHTML作为XML格式,会统一处理所有元素的缩进,不会区分块级和内联:

<xsl:output encoding="UTF-8" method="xhtml" indent="yes"/>

如果不需要任何缩进,可以进一步添加indent="no",这样输出会完全紧凑,不会有多余空格。

3. 关闭输出缩进

直接在<xsl:output>中关闭缩进功能,所有元素都会紧凑输出,彻底避免多余空格:

<xsl:output encoding="UTF-8" method="html" indent="no"/>

验证效果

使用上述任意方法后,重新转换XML,输出的<g>元素会和<span>一样紧凑,不会出现多余的换行和缩进:

<html>
   <body>some text<g type="gaiji">char</g><span class="gaiji">char</span>some text
   </body>
</html>

内容的提问来源于stack exchange,提问作者callmenp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:39