这是我的源XML:
<Chat>
<Chat StartTime="2017-05-28T02:05:52">
<message userId="02A0592964A8F75F" timeShift="4">
<msgText> Hi </msgText>
</message>
<message userId="123458566666666B" timeShift="30">
<msgText> Hello.. How can I Help You. ? </msgText>
</message>
</Chat>
我需要一个XSL来将源代码转换为:
<Chats>
<message time="2017-05-28T02:05:56" userId="02A0592964A8F75F">Hi</message>
<message time="2017-05-28T02:06:32" userId="02A0592964A8F75F">Hello.. How can I Help You. ?</message>
</Chats>
在输出XML文件中,应使用基于TimeShift(秒)的StartTime更新消息时间。
答案 0 :(得分:0)
如果可以使用XSLT 2.0,那么您的转换将如下所示:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" extension-element-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:template match="/">
<Chats>
<xsl:variable name="timeShift" select="Chat/@StartTime"/>
<xsl:for-each select="Chat/message">
<message>
<xsl:attribute name="time">
<xsl:value-of select="xs:dateTime($timeShift) + xs:dayTimeDuration(concat('PT', @timeShift,'S'))"/>
</xsl:attribute>
<xsl:attribute name="userId">
<xsl:value-of select="@userId"/>
</xsl:attribute>
<xsl:value-of select="msgText"/>
</message>
</xsl:for-each>
</Chats>
</xsl:template>
</xsl:stylesheet>
它产生以下结果:
<Chats>
<message time="2017-05-28T02:05:56" userId="02A0592964A8F75F"> Hi </message>
<message time="2017-05-28T02:06:22" userId="123458566666666B"> Hello.. How can I Help You. ? </message>
</Chats>
与你的有点不同:
<Chats>
<message time="2017-05-28T02:05:56" userId="02A0592964A8F75F">Hi</message>
<message time="2017-05-28T02:06:32" userId="02A0592964A8F75F">Hello.. How can I Help You. ?</message>
</Chats>
所以我有一个问题。您是否需要从StartTime或上一条消息转移?