在将XML转换为HTML的样式表中使用XSLT 2.0元素analyze-string;具体来说,我使用它将化学公式中下标的字符串编码转换为HTML下标。因此,结果是一个字符串,在一个p或td元素中嵌入标记。使用XSLT 2.0分析字符串消除换行符
变换是应该产生如H O,但实际上输出插入在HTML的线断:
H
<sub>2</sub>O
,这断裂是(正确地)由浏览器解释为空间:
ħ ö
这是难看。
有没有办法删除换行符?我试着把整个分析字符串元素放在一行上,并且不起作用。
输入会是这样的
<OrdinaryStructralFormula>H$_2$O</OrdinaryStructuralFormula>
一个简单的例子,并
<OrdinaryStructralFormula>C$_2$OH$_5$$^-</OrdinaryStructuralFormula>
一个更复杂的一个。请注意,下标模式在一般情况下可以匹配多次,可以位于字符串的中间或末尾。该模式还必须匹配并消除任何付费符号:第二个示例末尾的$^- 位。
XSLT处理器是Saxon 9.4,接下来是XSLT模板。
<xsl:template name="formula">
<xsl:param name="formula"/>
<xsl:if test="$formula">
<xsl:variable name="f" select="translate($formula, '$', '')"/>
<xsl:analyze-string select="$f" regex="(_)(\d+)|(\^)\d*\+|(\^)\d*\-">
<xsl:matching-substring>
<xsl:if test="regex-group(1)='_'">
<sub><xsl:value-of select="regex-group(2)"/></sub>
</xsl:if>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:if>
</xsl:template>
请考虑发布完整的,最小的但是格式良好的输入XML,XSLT代码,期望输出,当前输出的样本以展示问题并允许我们重现它。在所谓的输入是 H $ _2 $ O OrdinaryStructuralFormula>的情况下,其中开始标记名称与结束标记名称不同,无法分辨出您得到的空白是什么原因,而我在发布的XSLT片段中没有看到任何内容可以解释它。 –
2012-07-16 12:20:36