gpt4 book ai didi

.net - XSLT 转换日期时间到日期格式

转载 作者:行者123 更新时间:2023-12-04 16:42:00 26 4
gpt4 key购买 nike

我正在尝试将日期时间转换为日期格式 yyyy-MM-dd,因为我使用的是 xsd.exe 工具,xs:date 数据类型会自动更改为日期时间数据类型,因为 .NET 中没有类型完全匹配类型 xs:date 的框架。

但我无法让它工作

<articles>
<article>
<articleid>48992</articleid>
<deliverydateasked>2009-01-29T00:00:00+01:00</deliverydateasked>
</article>
<article>
<articleid>48993</articleid>
<deliverydateasked>2009-01-30T00:00:00+01:00</deliverydateasked>
</article>
</articles>

试图将 xml 转换为
<articles>
<article>
<articleid>48992</articleid>
<deliverydateasked>2009-01-29</deliverydateasked>
</article>
<article>
<articleid>48993</articleid>
<deliverydateasked>2009-01-30</deliverydateasked>
</article>
</articles>

目前我正在使用这个 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<articles>
<xsl:apply-templates select="article">
</xsl:apply-templates>
</articles>
</xsl:template>

<xsl:template name="FormatDate">

<xsl:param name="DateTime" />
<xsl:variable name="date">
<xsl:value-of select="substring-before($DateTime,'T')" />
</xsl:variable>

<xsl:if test="string-length($date) != 10">
<xsl:value-of select="$DateTime"/>
</xsl:if>
<xsl:if test="string-length($date) = 10">
<xsl:value-of select="$date"/>
</xsl:if>
</xsl:template>

<xsl:template match="article">
<xsl:call-template name="FormatDate">
<xsl:with-param name="DateTime" select="deliverydateasked"/>
</xsl:call-template>
</xsl:template>

有谁知道一个好的 xslt 转换。

提前致谢

我的代码的输出结果是
<articles /> 

最佳答案

在 XPath 2.0 中格式化将变得更加容易,微软目前在过去 8 年中一直拒绝支持它。由于格式化问题实际上只对 .Net 中的 XSLT 持续存在,我喜欢使用自定义函数,它更清晰、更容易:

带格式化功能的 XSLT:

    xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.tempuri.org/User">

<msxsl:script implements-prefix="user" language="C#">
<![CDATA[
public string FormatCurrency(string amount)
{
return decimal.Parse(amount).ToString("C0");
}

public string FormatDate(string dateValue)
{
return DateTime.Parse(dateValue).ToString("MM/dd/yyyy hh:mm");
}
]]>
</msxsl:script>

用法:
<xsl:value-of select="user:FormatDate(@transactionDate)"/>
<xsl:value-of select="user:FormatCurrency(@amount)"/>

当您在 .Net 中执行您的 XSLT 时,请确保告诉它它是受信任的(以便 msxsl:script 块将运行。
XslCompiledTransform.Load(reader, XsltSettings.TrustedXslt, null);

关于.net - XSLT 转换日期时间到日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com