Xml 输出XSLT<;xsl:message>;无尾线中断

Xml 输出XSLT<;xsl:message>;无尾线中断,xml,xslt,rspec,Xml,Xslt,Rspec,我正在使用在处理XML文件时输出错误。这很好,但当我尝试在RSpec中预期该错误时,我遇到了这样一个事实:它显然在xsl:消息的末尾添加了一个换行符。我不想在测试中添加奇怪的换行符,我更愿意从xsl:消息中删除换行符 XML: 我试图规范xsl:message输出的格式中的空间,因为它完全是由实现定义的,大多数处理器并没有给您太多的控制权。正如Michael Kay指出的那样,xsl:message输出完全依赖于每个处理器的实现。来自“W3C规范”:“xsl:message指令以一种依赖于XSL

我正在使用
在处理XML文件时输出错误。这很好,但当我尝试在RSpec中预期该错误时,我遇到了这样一个事实:它显然在xsl:消息的末尾添加了一个换行符。我不想在测试中添加奇怪的换行符,我更愿意从xsl:消息中删除换行符

XML:


我试图规范xsl:message输出的
格式中的空间,因为它完全是由实现定义的,大多数处理器并没有给您太多的控制权。正如Michael Kay指出的那样,
xsl:message
输出完全依赖于每个处理器的实现。来自“W3C规范”:“xsl:message指令以一种依赖于XSLT处理器的方式发送消息。”由于您的特定XML处理器添加了一个换行符,您最好在测试代码的字符串末尾添加一个换行符。
<prog Id="fooid"></prog>
<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:
  def item_from_xml(xml, params=['country', "'US'"])
    xslt = Nokogiri::XSLT(File.read(XSL FILE HERE))
    xslt.transform(Nokogiri::XML(xml), params)
  end
<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>