输出XSLT <xsl:message>,不带尾随换行符

时间:2017-05-03 17:33:29

标签: xml xslt rspec

我在处理XML文件时使用<xsl:message terminate="yes">输出错误。这工作正常,但是当我试图期望RSpec中的错误时,我遇到它显然在xsl:message的末尾添加换行符这一事实。我不想在测试中添加一个奇怪的换行符,我更喜欢从xsl:message中删除换行符。

XML:

<prog Id="fooid"></prog>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="prog">
  <xsl:apply-templates select="." mode="second-pass"/>
</xsl:template>

<xsl:template match="prog" mode="second-pass">
  <xsl:message terminate="yes"><xsl:value-of select="@Id"/> was dropped</xsl:message></xsl:template>

在我的测试代码中:

it 'raises an error when an item matches no other templates' do
  expect{item_from_xml('<prog Id="fooid">')}.to raise_error(RuntimeError.new('fooid was dropped'))
end

但输出是:

Failure/Error: expect{item_from_xml('<prog Id="fooid">')}.to raise_error(RuntimeError.new('fooid was dropped'))
       expected #<RuntimeError: fooid was dropped>, got #<RuntimeError: fooid was dropped
       > with backtrace:

你可以在最后看到额外的换行符。

item_from_xml的代码如下:

  def item_from_xml(xml, params=['country', "'US'"])
    xslt = Nokogiri::XSLT(File.read(XSL FILE HERE))
    xslt.transform(Nokogiri::XML(xml), params)
  end

我试图在<value-of select字段中规范化空间,但这并没有做太多,因为它只影响了@Id。我试过了:

<xsl:template match="prog" mode="second-pass">
  <xsl:message terminate="yes"><xsl:value-of select="normalize-space(concat(@Id, ' ', 'was dropped'))"/></xsl:message></xsl:template>

但是这导致了完全相同的输出。我试过了:

<xsl:template match="prog" mode="second-pass">
  <xsl:message terminate="yes"><xsl:value-of select="@Id"/><xsl:text> was dropped</xsl:text></xsl:message></xsl:template>

再次没有运气。我不想从整个文件中删除尾随的新行,只是在我使用终止消息的情况下。我觉得我可能有些愚蠢的东西,但是我对XSLT很新,我似乎无法得到这个。

0 个答案:

没有答案