c# - 使用带有附加信息的 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>
解决方案
您可以使用子字符串从日期中提取时间:
<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
推荐阅读
- c# - 给定构造函数中分配的变量的值,如何初始化类的实例以设置属性?
- list - wp-admin user.php / 用户列表页面中的用户列表
- sql-server - 如何将表格转换为平面文件,每个字段都在新行上
- pytorch - 为什么torch.cuda.device的设备参数可能大于torch.cuda.device_count()?
- lua - 如何使一行代码在循环中运行一次,并且只运行下一行代码,直到前一行运行一次?
- javascript - 将 NProgress 与“React.lazy”一起使用
- c# - “System.IO.File”不包含“ReadLines”的定义
- node.js - 在 Azure AppService 中运行 Angular 应用程序时可能导致“ng:未找到”的原因是什么?
- java - 加载大量文本时加快附加到java swing中的jTextArea
- c# - for (var i = 0; i < count; i++) { } == for (var i = 0; i < count; i++) { }。这是什么符号,为什么要使用它?