如何根据Timestampcreate元素的日期和时间值获取人名

时间:2016-04-27 21:44:29

标签: xml xslt-1.0

使用我的xml文档,我想在输出中显示 Respondent的名称。

这是条件 当前状态<TimestampCreate>元素在03/24/2016中午之前有日期和时间时,显示Party/PartyName元素的格式化名称。

否则,当前状态<TimestampCreate>在2016年3月24日中午之后有一个日期时,显示CaseParty/CasePartyName元素的formattedname。

我该怎么做?

我的xml文档

<Integration>
    <Case>
        <CaseParty ID="17154970" InternalCasePartyID="1636956553" InternalPartyID="1615052853">
            <Connection Word="RSP" BaseConnection="DF" ID="39228182" InternalCasePartyConnectionID="1638740325">
                <Description>Respondent</Description>
                <TimestampCreate>4/27/2016 9:25:08 AM</TimestampCreate>
                <DateAdded>04/27/2016</DateAdded>
            </Connection>
            <CasePartyName Current="true" ID="10737806" InternalNameID="1615969730">
                <FormattedName>Tree, Walnut</FormattedName>
            </CasePartyName>
            <TimestampCreate>4/27/2016 9:25:08 AM</TimestampCreate>
        </CaseParty>
        <ProtectionOrders>
            <ProtectionOrder Op="E" InternalProtectionOrderID="2408">
                <Statuses>
                    <Status Op="A">
                        <Current>true</Current>
                        <Active>Yes</Active>
                        <Date Op="A">04/27/2016</Date>
                        <TimestampCreate Op="A">04/27/2016 12:01:58:963</TimestampCreate>
                    </Status>
                </Statuses>
            </ProtectionOrder>
        </ProtectionOrders>
    </Case>
    <Party ID="17154970" InternalPartyID="1615052853">
        <PartyName ID="10737806" Current="true" InternalNameID="1615969730">
            <FormattedName>Nelson, Plince</FormattedName>
    </Party>
</Integration>

我的XSLT代码

<xsl:for-each select="CasePartyName[@Current='true']">
    <xsl:value-of select="FormattedName"/>
</xsl:for-each>

1 个答案:

答案 0 :(得分:0)

你的问题并不完全清楚 - 你的意见并不完善。

通常,XSLT 1.0没有日期或时间的概念,它可以做的唯一大小比较是数字。这意味着您必须将时间戳转换为数字,以便以后的时间戳会产生更大的数字。

例如,给出以下输入:

<强> XML

<root>
   <node>
        <TimestampCreate>3/23/2016 9:25:08 AM</TimestampCreate>
   </node>
   <node>
        <TimestampCreate>3/24/2016 9:25:08 AM</TimestampCreate>
   </node>
   <node>
        <TimestampCreate>3/24/2016 9:25:08 PM</TimestampCreate>
   </node>
   <node>
        <TimestampCreate>3/25/2016 9:25:08 AM</TimestampCreate>
   </node>
</root>

以下样式表:

XSLT 1.0

<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:template match="/root">
    <output>
        <xsl:for-each select="node">
            <item>
                <xsl:variable name="date" select="substring-before(TimestampCreate, ' ')" />
                <xsl:variable name="time" select="substring-before(substring-after(TimestampCreate, ' '), ' ')" />
                <xsl:variable name="pm" select="contains(TimestampCreate,'p') or contains(TimestampCreate,'P')"/>

                <xsl:variable name="year" select="substring-after(substring-after($date, '/'), '/')" />
                <xsl:variable name="month" select="substring-before($date, '/')" />
                <xsl:variable name="day" select="substring-before(substring-after($date, '/'), '/')" />

                <xsl:variable name="hour12" select="substring-before($time, ':')" />
                <xsl:variable name="minute" select="substring-before(substring-after($time, ':'), ':')" />
                <xsl:variable name="second" select="substring-after(substring-after($time, ':'), ':')" />

                <xsl:variable name="hour" select="$hour12 mod 12 + 12*$pm"/>

                <xsl:variable name="timestamp-num" select="$second + 100 * $minute + 10000 * $hour + 1000000 * $day + 100000000 * $month + 10000000000 * $year"/>

                <xsl:choose>
                    <xsl:when test="$timestamp-num &lt; 20160324120000">
                        <!-- RESULT WHEN BEFORE -->
                        <xsl:text>BEFORE</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                        <!-- RESULT WHEN AFTER -->
                        <xsl:text>AFTER</xsl:text>
                    </xsl:otherwise>
                </xsl:choose>
            </item>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

将返回:

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<output>
   <item>BEFORE</item>
   <item>BEFORE</item>
   <item>AFTER</item>
   <item>AFTER</item>
</output>