首页 > 解决方案 > 使用带有附加信息的 xslt 转换 xml

问题描述

我目前正在使用我在此处找到的 xsl 样式表,并且我正在尝试添加一定的改进,以便使用 date 呈现时间。

当前通过特定日期时,输出呈现为,<output>September 24th, 2020</output>但我还想包括类似于下面的时间

2020年9月24日 09:30

知道如何进行改进

输入如下: -2020-09-24T09:30:00+00:00

我的代码如下

string xsltPath = @ "D:\xslt\xslt.xml";

string xslt = File.ReadAllText(xsltPath);

var oldDocument = new XDocument(
 new XElement("date", "2020-09-24T09:30:00+00:00")

);

var newDocument = new XDocument();

using(var stringReader = new StringReader(xslt)) {
 using(XmlReader xsltReader = XmlReader.Create(stringReader)) {
  var transformer = new XslCompiledTransform();
  transformer.Load(xsltReader);
  using(XmlReader oldDocumentReader = oldDocument.CreateReader()) {
   using(XmlWriter newDocumentWriter = newDocument.CreateWriter()) {
    transformer.Transform(oldDocumentReader, newDocumentWriter);
   }
  }
 }
}

string result = newDocument.ToString();
Console.WriteLine(result);

XSL 样式表定义如下

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <output>
            <xsl:variable name="month" select="substring(date, 6, 2)"/>
            <xsl:choose>
                <xsl:when test="$month=1">January</xsl:when>
                <xsl:when test="$month=2">February</xsl:when>
                <xsl:when test="$month=3">March</xsl:when>
                <xsl:when test="$month=4">April</xsl:when>
                <xsl:when test="$month=5">May</xsl:when>
                <xsl:when test="$month=6">June</xsl:when>
                <xsl:when test="$month=7">July</xsl:when>
                <xsl:when test="$month=8">August</xsl:when>
                <xsl:when test="$month=9">September</xsl:when>
                <xsl:when test="$month=10">October</xsl:when>
                <xsl:when test="$month=11">November</xsl:when>
                <xsl:when test="$month=12">December</xsl:when>
            </xsl:choose>
            <xsl:text> </xsl:text>
            <xsl:variable name="day" select="number(substring(date, 9, 2))"/>
            <xsl:value-of select="$day"/>
            <xsl:choose>
                <xsl:when test="$day=1 or $day=21 or $day=31">st</xsl:when>
                <xsl:when test="$day=2 or $day=22">nd</xsl:when>
                <xsl:otherwise>th</xsl:otherwise>
            </xsl:choose>
            <xsl:text>, </xsl:text>
            <xsl:value-of select="substring(date, 1, 4)"/>
        </output>
    </xsl:template>
    </xsl:stylesheet>

标签: c#.netxmldatetimexslt

解决方案


您可以使用子字符串从日期中提取时间:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <output>
            <xsl:variable name="month" select="substring(date, 6, 2)"/>
            <xsl:choose>
                <xsl:when test="$month=1">January</xsl:when>
                <xsl:when test="$month=2">February</xsl:when>
                <xsl:when test="$month=3">March</xsl:when>
                <xsl:when test="$month=4">April</xsl:when>
                <xsl:when test="$month=5">May</xsl:when>
                <xsl:when test="$month=6">June</xsl:when>
                <xsl:when test="$month=7">July</xsl:when>
                <xsl:when test="$month=8">August</xsl:when>
                <xsl:when test="$month=9">September</xsl:when>
                <xsl:when test="$month=10">October</xsl:when>
                <xsl:when test="$month=11">November</xsl:when>
                <xsl:when test="$month=12">December</xsl:when>
            </xsl:choose>
            <xsl:text> </xsl:text>
            <xsl:variable name="day" select="number(substring(date, 9, 2))"/>
            <xsl:value-of select="$day"/>
            <xsl:choose>
                <xsl:when test="$day=1 or $day=21 or $day=31">st</xsl:when>
                <xsl:when test="$day=2 or $day=22">nd</xsl:when>
                <xsl:otherwise>th</xsl:otherwise>
            </xsl:choose>
            <xsl:text>, </xsl:text>
            <xsl:value-of select="substring(date, 1, 4)"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="substring(date, 12, 5)"/>
        </output>
    </xsl:template>
</xsl:stylesheet>

看到它在这里工作:https ://xsltfiddle.liberty-development.net/bEzknt7


推荐阅读