在文本输出中排除 XSLT (1.0) 行 returns 和额外的空格
Exclude XSLT's (1.0) line returns and extra whitespace in text output
我希望我的 XSLT 看起来漂亮并因此具有可读性,这让我感到内疚。所以我缩进并包含换行符。但是转换从字面上理解这些(我理解为什么),但我不知道是否有排除这些的选项。我已经广泛搜索了。我知道几年前我找到了一个解决方案,但我不记得它是什么了。
此转换用于生成单行电子邮件主题,因此我不想要额外的白色 space 和行 returns.
如何让我的可读 XSLT 具有我想要的单行文本输出?
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/>
我希望我的 XSLT 看起来漂亮并因此具有可读性,这让我感到内疚。所以我缩进并包含换行符。但是转换从字面上理解这些(我理解为什么),但我不知道是否有排除这些的选项。我已经广泛搜索了。我知道几年前我找到了一个解决方案,但我不记得它是什么了。
此转换用于生成单行电子邮件主题,因此我不想要额外的白色 space 和行 returns.
如何让我的可读 XSLT 具有我想要的单行文本输出?
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/>