[英]Transform an XML node value using XSLT
我有几种来自不同来源的XML,我正在使用XSLT将它们转换为C#应用程序可以统一解析的一种标准格式。 我已经进行了概念验证转换,并且可以将XHTML(几乎)完全转换为标准XML。 这个问题是关于“几乎”的。
C#应用程序期望输入xml(转换的输出)不仅遵循xml元素的结构,而且符合节点内部数据的格式,例如, <date>
元素必须符合某种格式。格式为"yyyy/MM/dd"
,但是一个输入xml(用于转换)可以采用dd / MM格式,而另一种则可以。
请注意,我控制了C#应用程序并设计了标准XML模板,因此更改这些都不是问题,我也知道要转换的不同传入XML的确切格式,并且我正在为每种类型开发一个转换我收到的XML格式,因为它们彼此之间可能有很大不同,并且我不希望通过更改转换以适应某种格式的更改来破坏我以前使用的另一种格式。
因此,切入正题,如何使用XLST转换节点的值? 我如何才能告诉转换从(特别是) dd/MM
格式获取此节点值,并将其转换为yyyy/MM/dd
?
PS我已经考虑过创建一个额外的XML用于配置,以便可以在C#中针对每种格式对这种类型的转换进行转换,但是我希望这是最后的资源。 我希望XSLT的输出为100%标准。 我还发现了一些其他的SO问题,描述了转换值的过程,但是所有这些问题都涉及条件替换,看看值是否等于x
并输出y
,因为日期可以是任何东西,所以不会这样做。
如何告诉转换从(特别是)dd / MM格式获取此节点值,并将其转换为yyyy / MM / dd?
将日期从dd/mm/yyyy
为yyyy/mm/dd
是一个相对简单的字符串操作:
<xsl:value-of select="concat(substring($node, 7, 4), '/', substring($node, 4, 2), '/', substring($node, 1, 2))"/>
除非您添加有关要添加年份的规则,否则无法将日期从dd/mm
为yyyy/mm/dd
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.