使用我的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>
答案 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 < 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>