【发布时间】:2019-09-12 19:48:51
【问题描述】:
带有包含单个(或多个)空格的xsl:text 的 XSLT 不会在 MarkLogic 9.0-9 中打印空格。请参阅以下示例:
xquery version "1.0-ml";
let $doc :=
<doc>
<foo>foo</foo>
<bar>bar</bar>
</doc>
let $xsl :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text" omit-xml-declaration="yes" indent="no" />
<xsl:template match="doc">
<xsl:value-of select="foo"/>
<xsl:text> </xsl:text>
<xsl:value-of select="bar"/>
</xsl:template>
</xsl:stylesheet>
return xdmp:xslt-eval($xsl, $doc) = "foo bar"
这返回错误。结果是“foobar”。我实际上期待“foo bar”。
我也试过<xsl:text xml:space="preserve"> </xsl:text>,但这也不起作用。
作为一种解决方法,我目前使用<xsl:value-of select="' '"/>,它工作正常,但我想知道这是否是一个错误?在 Saxon 中使用相同的转换和文档会打印空格。
【问题讨论】:
-
我看到相同的“失败”,仅使用 Saxon XQuery 在 xqueryfiddle.liberty-development.net/eiQZDbq/2 调用 XPath 3.1 的
transform函数,所以我认为问题在于 XQuery 中内联包含 XSLT 代码以及 XQuery 如何处理此类元素构造函数中的空白。我需要深入研究 XQuery 规范以找出解释它的原因以及是否可以选择使用不同的解析模式。在 XSLT 2 方面,只需执行<xsl:value-of select="foo, bar"/>即可修复独立于任何 XQuery 元素构造的简单测试用例。