我有一个xml文档,其中有一些日期节点,我试图获取它们的值,如果值是有效日期,否则为空字符串。
XML:
<root>
<START_DATE><![CDATA[03/05/2015]]></START_DATE>
<START_DATE><![CDATA[05/05/2015]]></START_DATE>
<START_DATE><![CDATA[Online]]></START_DATE>
</root>
XSLT:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:output method="text" indent="yes" />
<xsl:template match="@*|node()">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="START_DATE">
<xsl:copy>
<xsl:value-of select="if(string(normalize-space(.)) castable as xs:date) then normalize-space(.) else ''"></xsl:value-of>
</xsl:copy>
<xsl:text>,</xsl:text>
</xsl:template>
</xsl:transform>
输出:
,,,
预期:
03/05/2015,05/05/2015,,
答案 0 :(得分:3)
如果值是有效日期,则获取其值,否则为空字符串
Xalan是一个XSLT 1.0处理器。 XSLT 1.0没有&#34; date&#34;的概念,因此您必须自己执行验证。确切的方法取决于具体做法&#34;有效日期&#34;在这种情况下意味着
如果它足以确保声称是日期的字符串格式化作为日期(即具有完全相同的模式&#34; ## / ## / ## ##&#34;),那么测试可以非常简单:
castable as xs:date
如果你还需要测试所谓的日期是公历中的有效日期(例如,不是&#34; 13/13/2015&#34;,那么它会变得更加复杂。) p>
关于XSLT 2.0的说明:
在XSLT 2.0中,您可以使用MM/DD/YYYY
来测试日期是否有效。但是,即使格式为DD/MM/YYYY
或YYYY-MM-DD
的有效日期也不会通过此测试。您必须先将这些字符串转换为if (tableNameVector.size() != tableTagIdVector.size())
throw new IllegalArgumentException("tableNameVector and tableTagIdVector " +
"must have the same size");
格式。