按路径表达式选择节点时,XSLT缺少换行符

时间:2017-11-13 07:05:34

标签: xslt

我正在使用复制标记内的路径表达式,根据XSLT: Copy child elements of a complex type only once复制一些节点:

<xsl:copy-of select="/xs:schema/xs:complexType[@name=current()/xs:element/@type]"/>

在输出中,此语句处理的元素中缺少所有换行符。 (它们显示在其他地方)看起来像这样:

...</xs:complexType><xs:complexType....

我只能在之前和之后添加换行符,但不能在它们之间添加换行符。我怎么能做到这一点? Thanx为您提供帮助!

2 个答案:

答案 0 :(得分:1)

您提供的数据太少,无法尝试任何测试。例如。目前尚不清楚,什么输出方法使用你的脚本。

XSLT脚本通常包含xsl:strip-space指令,这会导致文本节点的规范化。 这种正常化a.o.更改“白色”字符的“内部”序列,包括换行符, 进入一个空间。

也许这就是原因。

另请参阅脚本中的xsl:output指令。 它是否包含indent="yes"属性? 如果没有,则输出在输出元素之间不包含换行符。

也许你的脚本在某些地方包含explicite换行符的输出 (例如<xsl:text>&#aA;</xsl:text>),因此这些换行符 呈现。

但是如果您没有indent="yes"属性,则不会插入换行符 连续元素之间的“自动”。

答案 1 :(得分:1)

您的XPath表达式仅选择xs:complexType元素,而不是选择分隔它们的空格。

当您使用不使用混合内容的XSD等词汇表(注释中除外)时,最好使用xsl:strip-space从输入中删除所有空白文本节点,然后生成新的输出中使用xsl:output indent='yes'的空格。