代码之家  ›  专栏  ›  技术社区  ›  crichavin

排除XSLT的(1.0)行返回和文本输出中的额外空白

  •  0
  • crichavin  · 技术社区  · 2 年前

    我很内疚,因为我希望我的XSLT看起来漂亮,因此可读。所以我缩进并包含换行符。但是,转换从字面上理解这些(我理解为什么),但我不知道是否有排除这些的选项。我找遍了。我知道几年前我找到了一个解决方案,但我不记得是什么了。

    这个转换用于生成一行电子邮件主题,因此我不想要额外的空白和行返回。

    如何将可读的XSLT与所需的单行文本输出结合起来?

    可玩的示例: xsltransform.net

    XML输入

    <?xml version="1.0" encoding="UTF-8"?>
    <response>
        <OrderHeaderId>123456</OrderHeaderId>
        <ProjectName>Project</ProjectName>
        <RequiresApproval>true</RequiresApproval>
    </response>
    

    XSLT

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="text" />
        <xsl:template match="/response">New Job: <xsl:value-of select="OrderHeaderId"/>: 
            <xsl:if test="RequiresApproval='true'">
                Requires Approval!              
            </xsl:if>
            <xsl:value-of select="ProjectName"/> - Acknowledgement from <xsl:value-of select="SellingCompanyName"/>
        </xsl:template>
    </xsl:stylesheet>
    

    输出

    New Job: 123456: 
            
                Requires Approval!              
            Project - Acknowledgement from Acme
    

    **期望输出**

    New Job: 123456: Requires Approval! Project - Acknowledgement from Acme
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   michael.hor257k    2 年前

    如果希望样式表缩进,那么使用 xsl:text 明确输出文本的说明:

    XSLT1.0

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="text" />
    
    <xsl:template match="/response">
        <xsl:text>New Job: </xsl:text>
        <xsl:value-of select="OrderHeaderId"/>
        <xsl:text>: </xsl:text>
        <xsl:if test="RequiresApproval='true'">
            <xsl:text>Requires Approval! </xsl:text>
        </xsl:if>
        <xsl:value-of select="ProjectName"/>
        <xsl:text>- Acknowledgement from </xsl:text>
        <xsl:value-of select="SellingCompanyName"/>
    </xsl:template>
        
    </xsl:stylesheet>