当我尝试在一个转换中替换一段文本中的多个空格时,我遇到了一个问题。我觉得我忽略了一些简单的东西,但我就是看不到。
简单示例:
<para>Doors 1 (<extref targetid="REF1034248349404" id="abc-123"/>) and 2 (<extref targetid="REF1034248370394" id="xyz-123"/>) closed, for temporary installation see <xref xrefid="def-123"/>
</para>
简单模板:
<xsl:template match="para">
<p>Text as is</p>
<xsl:for-each select="text()/normalize-space()">
<text><xsl:value-of select="."/></text>
</xsl:for-each>
<p>Text with '\s+' replaced with '*'</p>
<xsl:for-each select="text()/normalize-space()">
<text><xsl:value-of select="replace(., '\s+', '*')"/></text>
</xsl:for-each>
</xsl:template>
预期输出:
<p>Text as is</p>
<text>Doors 1 (</text>
<text>) and 2 (</text>
<text>) closed, for temporary installation see</text>
<text/>
<p>Text with '\s+' replaced with '*'</p>
<text>Doors*1*(</text>
<text>)*and*2*(</text>
<text>)*closed,*for*temporary*installation*see</text>
<text/>
实际产量:
<p>Text as is</p>
<text>Doors 1 (</text>
<text>) and 2 (</text>
<text>) closed, for temporary installation see</text>
<text/>
<p>Text with '\s+' replaced with '*'</p>
<text>Doors*1*(</text>
<text>)*and*2* (</text>
<text>)*closed,*for*temporary*installation*see</text>
<text/>
注意第二个<text>
元素中的额外空间。'\s+'找不到'2'字符后的多个空格(我相信是2个)的原因是什么?
像往常一样,任何和所有的帮助都很感激。
1条答案
按热度按时间mkh04yzy1#
经过一个新的方法来调试它,我发现我的问题。我把我的样本,并运行他们与撒克逊通过Python(saxoncee)。在运行我的原始XSL并使用lxml将输出打印到终端时,我发现了罪魁祸首:
源代码中有一个不间断的空格字符。我修改了XSL如下:
现在得到所需的输出:
从这篇文章中得到了一些帮助:XSL - Remove non breaking space