0
將XML文件傳輸到TeX時,我嘗試重新格式化日期 - 我的發佈者說我必須在日期之間使用較小的水平空間 - 並且無法超越第一步。用方括號重新格式化日期
我的輸入文件是這個
<a>
<date>January 1900</date>
<date>2. 2. 1902</date>
<date>3. [3]. 1903</date>
<date>[4. 4. 1904]</date>
</a>
其中括號表示的日期還不能確定。有所有可能的括號組合,例如一年中的第二個數字:1 [9] 00。我創建了一個命令\小,這使得小空間的TeX: \ newcommand {\迷你} {\} 的XSLT後的結果應該是:
January 1900
2.{\mini}2.{\mini}1902
3.{\mini}[3].{\mini}1903
[4.{\mini}4.{\mini}1904]
我寫了一個函數,它試圖提取方括號並將它們的位置存儲到一個變量中,然後再將它們連接起來。但由於我無法得到變量顯示正確的位置,我卡住了:
<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>
是否有可能有適當的輸入,即適當的日期格式。沒有這一點,這將是容易出錯的猜測。 –
你爲什麼不更換空間較小的空間? –
我有一個屬性@when,它以1900-01-01格式存儲日期並可以使用。但它不包含不確定性。 – martinanton