【问题标题】:How do I get person name based on Timestampcreate element date and time value如何根据时间戳 Createelement 日期和时间值获取人名
【发布时间】:2016-04-27 21:44:29
【问题描述】:

使用我的 xml 文档,我想在输出中显示受访者的姓名。

这是条件 当当前状态 <TimestampCreate>element 的日期和时间早于 2016 年 3 月 24 日中午时,显示来自 Party/PartyName 元素的格式化名称。

否则当当前状态 <TimestampCreate> 的日期在 2016 年 3 月 24 日中午之后,显示来自 CaseParty/CasePartyName 元素的格式化名称。

我该怎么做?

我的 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>

【问题讨论】:

    标签: xml xslt-1.0


    【解决方案1】:

    您的问题并不完全清楚 - 而且您的输入格式不正确。

    一般来说,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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2021-10-01
      • 2023-03-22
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多