私のXMLファイルをTeXに転送するとき、私は日付を再フォーマットしようとしました。私の出版社は、日付間の水平スペースを小さくしなければならず、最初のステップを超えることはできません。大括弧で日付を再フォーマット
私の入力ファイルは、ブラケットは日付が確かではないことを意味し、この
<a>
<date>January 1900</date>
<date>2. 2. 1902</date>
<date>3. [3]. 1903</date>
<date>[4. 4. 1904]</date>
</a>
です。すべてのブラケットの組み合わせが可能です。年の第2の数:1 [9] 00。 XSLTはあるべき後 \ newcommand {\ミニ} {\、} 結果:
January 1900
2.{\mini}2.{\mini}1902
3.{\mini}[3].{\mini}1903
[4.{\mini}4.{\mini}1904]
私は抽出しようとする機能を、書いた私は、TeXに小さなスペースを作るコマンド\ミニを作成しましたそれらの位置を変数に格納し、その後それらを再び連結します。しかし、正しい位置を示す変数を得ることができないので、私は固執しています。
<xsl:function name="foo:date-translate">
<xsl:param name="date-string" as="xs:string"/>
<xsl:variable name="opening-square-bracket" as="xs:integer" select="count(substring-before($date-string,'['))"/>
<xsl:variable name="closing-square-bracket" as="xs:integer" select="count(substring-before($date-string,'['))"/>
<xsl:variable name="date-string-without-square-brackets" as="xs:string" select="replace(replace($date-string,'\[',''),'\]','')"/>
<xsl:choose>
<xsl:when test="matches($date-string-without-square-brackets,'\d{1,2}. \d{1,2}. \d{4}')">
<xsl:choose>
<xsl:when test="not(contains($date-string,'['))">
<xsl:value-of select="replace($date-string,'(\d{1,2}). (\d{1,2}). (\d{4})','$1\\mini$2\\mini$3')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring(replace($date-string-without-square-brackets,'(\d{1,2}). (\d{1,2}). (\d{4})','$1\\mini$2\\mini$3'),0,$opening-square-bracket),'[',substring(replace($date-string-without-square-brackets,'(\d{1,2}). (\d{1,2}). (\d{4})','$1\\mini$2\\mini$3'),$opening-square-bracket, $closing-square-bracket))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$date-string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
適切な入力、つまり適切な日付形式を持つことは可能ですか。それがなければ、間違いやすい傾向があります。 –
小さなスペースでスペースを置き換えてみませんか? –
私は日付を1900-01-01形式で格納し、それを使用できる属性@を持っています。不確実性は含まれていません。 – martinanton