使用XSLT转换XML节点值

时间:2015-10-06 05:01:04

标签: xml xslt

问题的一般描述

我有几个来自不同来源的XML,我正在使用XSLT将它们转换为C#应用程序可以统一解析的一种标准格式。我已经有了一个概念验证转换,我已经能够将XHTML(几乎)完全转换为我的标准XML。这个问题是关于“差不多”的。

C#应用程序期望输入xml(转换的输出)符合格式,不仅在xml元素的结构中,而且在节点内的数据格式中,例如,{{ 1}}元素必须采用<date>的格式,但是一个输入xml(用于转换)可以采用dd / MM格式,而另一个则可以使用。

请注意,我控制C#应用程序并设计标准XML模板,因此更改其中任何一个都不是问题,我也知道要转换的不同传入XML的确切格式,我正在开发一个转换对于我收到的每种类型的XML,因为它们彼此之间可能会有很大的不同,我不希望通过更改转换以适应格式的更改而打破以前工作的另一种格式。

关于我的问题的具体问题

因此,切入追逐,如何使用XLST转换节点的值?如何告诉转换从(特别)"yyyy/MM/dd"格式获取此节点值,并将其转换为dd/MM

P.S。我考虑过为配置创建一个额外的XML,以便我可以在C#中针对每种格式进行这种类型的转换,但是我希望这是最后一个资源。我希望它能使XSLT的输出达到100%标准。我还发现了一些其他的SO问题,描述了转换值的过程,但所有这些都讨论了条件替换,看看值是否等于yyyy/MM/dd并输出x,因为日期不会这样做可以是任何东西。

1 个答案:

答案 0 :(得分:1)

  

如何判断转换是否采用此节点值   (特别是)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