2
4

2 回答 2

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 回答
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)检查确保这是@normal一个数字,因为看起来您在normal属性中也有一些非日期值。是否存在可能是 6 位非日期数字的风险?

于 2013-01-11T16:45:11.903 回答