在文本输出中排除 XSLT (1.0) 行 returns 和额外的空格

Exclude XSLT's (1.0) line returns and extra whitespace in text output

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

此转换用于生成单行电子邮件主题,因此我不想要额外的白色 space 和行 returns.

如何让我的可读 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

如果您希望样式表缩进,请使用 xsl:text 指令显式输出文本:

XSLT 1.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>

作为已接受答案的补充: Allouche's method - 使用空的 XSLT 元素 - 有助于控制空格,例如

<xsl:text/>New Job: <xsl:value-of select="OrderHeaderId"/>: <xsl:text/>