我遇到了一个XSLT转换问题,我正在尝试执行此操作。在整个项目中,我正在努力将XML文档转换为CSV文件以供数据库上传。问题是XML将日期作为ISO8601格式(YYYY-MM-DDT00:00:00)中的属性值发送,但是为了让数据库从CSV文件中获取数据,我需要将其转换为MM/DD/YYYY。使用XSLT格式XML属性值的日期
下面是一个XML示例:
<GetChanged>
<UserInformation>
<Column Name="id" Value="555555555"/>
<Column Name="name" Value="Kevin"/>
<Column Name="bday" Value="1990-01-01T00:00:00"/>
</UserInformation>
</GetChanged>
这里是我试图使用XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:csv="csv:csv">
<xsl:output method="text"/>
<xsl:template match="GetChanged">
<!-- header -->
<xsl:text>"id","name","bday" </xsl:text>
<!-- data rows -->
<xsl:for-each select="UserInformation">
<!-- data cells -->
<xsl:for-each select="Column[@Name='id']">
<xsl:text>"</xsl:text>
<xsl:value-of select="@Value"/>
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text>,</xsl:text>
<xsl:for-each select="Column[@Name='name']">
<xsl:text>"</xsl:text>
<xsl:value-of select="@Value"/>
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text>,</xsl:text>
<xsl:for-each select="Column[@Name='bday']">
<xsl:text>"</xsl:text>
<xsl:value-of select="format-date(@Value, '[M01]/[D01]/[Y0001]')"/>
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
然而,当我使用引入nokogiri运行此通过红宝石,我最终得到一个错误:
RuntimeError:运行时错误:元素值 - XPath评估返回无结果
关于我能做些什么来适当地设置这个日期的想法?
在此先感谢!
你确定你的处理器支持XSLT 2.0吗? –