1

我正在为源节点做一个非常简单的 xslt,例如:

  <p>
        <media type="photo" id="lr002662" rights="licensed">
            <title>Logging in Canada</title>
        </media>Logging is cutting down trees for <definition>
            <word-term>lumber</word-term>
            <word-definition>wood</word-definition>
        </definition>. Loggers are also called <i>lumberjacks.</i>
    </p>

我在我的 xslt 样式表上运行这个源节点,一旦在 xmlspy 中,我得到以下输出:

 <para>
        <media type="photo" source="lr002662" rights="licensed">
            <resource.title>Logging in Canada</resource.title>
        </media>Logging is cutting down trees for <italic>lumber</italic> (wood). Loggers are also called <italic>lumberjacks.</italic>
    </para>

但后来我使用相同的 xslt 样式表在 saxon9he.jar 文件的命令行中运行它,我得到以下信息:

      <para>
        <media type="photo" source="lr002662" rights="licensed">
            <resource.title>Logging in Canada</resource.title>
        </media>Logging is cutting down trees for 
            <italic>lumber</italic>
             (wood)
        . Loggers are also called <italic>lumberjacks.</italic>
    </para>

正如你所看到的,媒体标签后面的文本现在包含了很多回车,这不是我想要的。我一直在使用 XMLSpy,所以从来没有注意到这个问题。任何专家都可以建议一种调试或提供我的 xslt 的方法吗?

4

2 回答 2

3

不同之处在于 Altova XML 处理器处理混合内容中的空白的方式。

XML 文档中的空格

默认情况下,Altova XSLT 2.0 引擎从源 XML 文档中的仅边界空白节点中去除所有边界空白。删除此空格会影响fn:position()fn:last()fn:count()fn:deep-equal()函数返回的值。有关更多详细信息,请参阅XPath 2.0 和 XQuery 1.0 函数部分中的XML 文档中的纯空格节点。

AltovaXML 去除具有纯空白内容的元素之间的“边界空白”文本节点:

仅边界空白文本节点是出现在混合内容元素内的两个元素之间的子仅空白文本节点。

正如 lwburk 在他的回答中所建议的那样,您可以通过在样式表中添加以下内容来指示其他处理器执行相同的操作:

<xsl:strip-space elements="*"/>

但是,您无法让 AltovaXML 保留空格,因为它们尚未实现 xsl:preserve-space,或者xsl:strip-space将始终将它们删除。

于 2011-12-30T00:03:22.460 回答
1

换行符在源代码中,所以我希望它们出现在转换的输出中,除非它们被特别删除。您可以使用以下方法去除所有仅包含空格的文本节点:

<xsl:strip-space elements="*"/>

这应该位于样式表的顶层(作为根元素的子xsl:stylesheet元素)。

于 2011-12-29T21:48:48.627 回答