我在将 XML 转换为 HTML 的样式表中使用 XSLT 2.0 元素分析字符串;具体来说,我用它来将化学公式中下标的字符串编码转换为 HTML 下标。因此,结果是一个字符串,进入 ap 或 td 元素,带有嵌入的标记。
转换应该产生像 H 2 O 这样的输出,但实际上在 HTML 中插入了一个换行符:
H
<sub>2</sub>O
并且这个中断(正确地)被浏览器解释为一个空格:
H 2 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>