質問する
2392 次
2 に答える
0
このようなもの?:
<xsl:choose>
<xsl:when text="string-length(@normal) = 6 and number(@normal) = number(@normal)">
<xsl:value-of select="concat(substring(@normal, 1, 4), '-', substring(@normal, 5, 2))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@normal" />
</xsl:otherwise>
</xsl:choose>
属性に日付以外の値も含まれているように見えるため、number(@normal) = number(@normal)
チェックにより、それが数値であることが確認されます。6桁の日付以外の番号になるリスクはありますか?@normal
normal
于 2013-01-11T16:45:11.903 に答える
0
この完全で短い変換:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@normal[string-length()=6]">
<xsl:attribute name="normal">
<xsl:value-of select="concat(substring(.,1,4),'-',substring(.,5))"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
次の XML ドキュメント (単一の最上位要素にラップされた提供されたフラグメント) に適用された場合:
<t>
<date normal="YYYMMDD"> Month, DD, YYYY</date>
<date normal="YYYY/YYYY"> YYYY-YYYY</date>
<date normal="YYYYMM"> Month, YYYY</date>
<date normal="YYYYMM">MM-YYYY</date>
<name normal="Smith, John"> John Smith </name>
</t>
必要な正しい結果が生成されます。
<t>
<date normal="YYYMMDD"> Month, DD, YYYY</date>
<date normal="YYYY/YYYY"> YYYY-YYYY</date>
<date normal="YYYY-MM"> Month, YYYY</date>
<date normal="YYYY-MM">MM-YYYY</date>
<name normal="Smith, John"> John Smith </name>
</t>
于 2013-01-12T05:05:05.380 に答える