XML を HTML に変換するスタイルシートで XSLT 2.0 要素の analyze-string を使用します。具体的には、化学式の下付き文字の文字列エンコーディングを HTML の下付き文字に変換するために使用します。したがって、結果は文字列であり、マークアップが埋め込まれた ap または td 要素に入ります。
変換は H 2 O のような出力を生成するはずですが、実際には HTML に改行を挿入します。
H
<sub>2</sub>O
この改行は、ブラウザーによって (正しく) スペースとして解釈されます。
H 2 O
これは醜いです。
改行を削除する方法はありますか? analyze-string 要素全体を 1 行にまとめてみましたが、うまくいきません。
入力は次のようになります
<OrdinaryStructralFormula>H$_2$O</OrdinaryStructuralFormula>
単純な場合と
<OrdinaryStructralFormula>C$_2$OH$_5$$^-</OrdinaryStructuralFormula>
より複雑なもののために。通常、添え字パターンは複数回一致する可能性があり、文字列の途中または最後にある可能性があることに注意してください。パターンはまた、電荷の表記法に一致し、除去する必要があります: 2 番目の例の最後の $^- ビットです。
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>