winkimjr2 Posted July 20, 2016 Posted July 20, 2016 I am using a variable vPoID to determine the right ProtectionOrder. Then I am displaying that PO's @InternalProtectionOrderID. I would also like to use the same variable to get that PO's ProtectionOrderNumber. How can I use the same variable to also get ProtectionOrderNumber? I would like to modify this line to use the variable vPoID to get the ProtectionOrderNumber <xsl:attribute name="protectionOrderNumber"><xsl:value-of select="ProtectionOrderNumber"/></xsl:attribute> Expected output <NotificationEvent notificationType="ProtectionOrderHearing" internalProtectionOrderID="2552" protectionOrderNumber="1600330"/> xslt code <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:mscef="courts.state.mn.us/extfun" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <xsl:if test="Integration/Case/SecurityGroup[not(contains(@Word,'SEAL'))] or not(Integration/Case/SecurityGroup)"> <xsl:call-template name="ProtectionOrderHearing"/> </xsl:if> </xsl:template> <!-- --> <xsl:template name="ProtectionOrderHearing"> <!--<xsl:if test="Integration/ControlPoint='SAVE-FAM-HEARING'">--> <xsl:if test="Integration/ControlPoint=('SAVE-FAM-HEARING') or ('SAVE-FAM-HEAR-CTS')"> <xsl:if test="Integration/Case/CaseType/@Word='DMA'"> <xsl:for-each select="Integration/Case"> <xsl:variable name="vFoundActivePO"> <xsl:for-each select="/Integration/ProtectionOrder[Deleted='false']"> <xsl:variable name="vControlPointTimestamp" select="mscef:formatDateTimeNumeric(string(/Integration/ControlPoint/@Timestamp))"/> <xsl:variable name="vCurrentPoStatus" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vControlPointTimestamp][1]/Type/@Word"/> <xsl:if test="($vCurrentPoStatus ='SBJO') or ($vCurrentPoStatus='SBJOCOR')">HIT</xsl:if> </xsl:for-each> </xsl:variable> <xsl:variable name="vFoundHearingTrigger"> <xsl:choose> <xsl:when test="count(Hearing[@Op='A'])>0">HIT</xsl:when> <xsl:when test="count(Hearing[@Op='D'])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (CancelledReason/@Op='E')])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (Setting/HearingDate/@Op='E')])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (Setting/CourtSessionBlock/StartTime/@Op='E')])>0">HIT</xsl:when> <xsl:when test="count(Hearing/Setting[@Op='A'])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (Setting/RescheduledType/@Op='E')])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (Setting/CancelledReason/@Op='E')])>0">HIT</xsl:when> <xsl:when test="count(Hearing[(@Op='E') and (Setting/CourtSessionBlock/StartTime/@Op='E')])>0">HIT</xsl:when> </xsl:choose> </xsl:variable> <xsl:if test="(contains($vFoundHearingTrigger,'HIT')) and (contains($vFoundActivePO,'HIT'))"> <xsl:choose> <xsl:when test="count(Hearing/Setting[not(Cancelled)])>0"> <xsl:for-each select="Hearing/Setting[not(Cancelled)]"> <!-- WK 07/19/2016--> <xsl:variable name="vCurrentTimestamp"> <xsl:value-of select="mscef:formatDateTimeNumeric(string(/Integration/ControlPoint/@Timestamp))"/> </xsl:variable> <xsl:variable name="vControlPointTimestamp" select="mscef:formatDateTimeNumeric(string(/Integration/ControlPoint/@Timestamp))"/> <!--WK 07/19/2016 variable to hold ProtectionOrders that have not been deleted--> <xsl:variable name="vPoID"> <!--WK 07/19/2016 Select all ProtectionOrder elements from the document that are not deleted--> <xsl:for-each select="//Integration/ProtectionOrder[Deleted='false']"> <xsl:variable name="vCurrentPoStatus" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vCurrentTimestamp][1]/Type/@Word"/> <xsl:if test="($vCurrentPoStatus ='SBJO') or ($vCurrentPoStatus='SBJOCOR')"> <xsl:value-of select="@InternalProtectionOrderID"/> </xsl:if> </xsl:for-each> </xsl:variable> <NotificationEvent notificationType="ProtectionOrderHearing"> <!--WK 07/19/2016 variable vPoID to get the right PO's attribute @InternalProtectionOrderID>--> <xsl:attribute name="internalProtectionOrderID"><xsl:value-of select="$vPoID"/></xsl:attribute> <xsl:attribute name="protectionOrderNumber"><xsl:value-of select="ProtectionOrderNumber"/></xsl:attribute> </NotificationEvent> </xsl:for-each> </xsl:when> <xsl:otherwise> <NotificationEvent notificationType="ProtectionOrderHearing"> <xsl:attribute name="internalProtectionOrderID"><xsl:value-of select="//Integration/ProtectionOrder[Deleted='false'][count(Statuses/Status[(Type/@Word='SBJO') or (Type/@Word='SBJOCOR')])>0]/@InternalProtectionOrderID"/></xsl:attribute> <xsl:attribute name="protectionOrderNumber"><xsl:value-of select="//Integration/ProtectionOrder[Deleted='false'][count(Statuses/Status[(Current='true') and ((Type/@Word='SBJO') or (Type/@Word='SBJOCOR'))])>0]/ProtectionOrderNumber"/><xsl:value-of select="//Integration/ProtectionOrder[Deleted='false'][count(Statuses/Status[(Type/@Word='SBJO') or (Type/@Word='SBJOCOR')])>0]/ProtectionOrderNumber"/></xsl:attribute> <xsl:text>NoHearings</xsl:text> </NotificationEvent> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:for-each> </xsl:if> </xsl:if> </xsl:template> <!-- --> <msxsl:script language="JScript" implements-prefix="mscef"><![CDATA[ function formatDateTimeNumeric(sDate){ if(sDate.length==0){ return ""; } else{ var oDate=new Date(sDate); var str = oDate.getSeconds(); return "" + oDate.getFullYear().toString() + padZeroes(oDate.getMonth() + 1,2) + padZeroes(oDate.getDate(),2) + padZeroes(oDate.getHours().toString(),2) + padZeroes(oDate.getMinutes(),2) + padZeroes(oDate.getSeconds(),2); } } function currentDateTimeNumeric(){ var oDate=new Date(); var str = oDate.getSeconds(); return "" + oDate.getFullYear().toString() + padZeroes(oDate.getMonth() + 1,2) + padZeroes(oDate.getDate(),2) + padZeroes(oDate.getHours().toString(),2) + padZeroes(oDate.getMinutes(),2) + padZeroes(oDate.getSeconds(),2); } function fixOdysseyTimestamp(sDate){ /* Replace the ":" between seconds and miliseconds */ if(sDate.length==0){ return ""; } else{ var strParts1 = sDate.split(" "); var strTime = strParts1[1]; var strParts2 = strTime.split(":"); return strParts1[0] + " " + strParts2[0] + ":" + strParts2[1] + ":" + strParts2[2]; } } ]]></msxsl:script> </xsl:stylesheet> xml document <Integration xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:tsg="http://tsgweb.com" xmlns:IXML="http://tsgweb.com" xmlns:CMCodeQueryHelper="urn:CMCodeQueryHelper" PackageID="BCA PO Notification" MessageID="82119264" xmlns=""> <ControlPoint Timestamp="7/14/2016 9:00:52 AM">SAVE-FAM-HEARING</ControlPoint> <Case> <FiledDate>07/14/2016</FiledDate> <CaseCategory>FAM</CaseCategory> <CaseType Word="DMA">Domestic Abuse</CaseType> <BaseCaseType>Civil Domestic Violence</BaseCaseType> <SecurityGroup Word="CONFPOR">Conf - Protective Order</SecurityGroup> <Active>true</Active> <Deleted>false</Deleted> <Assignment Current="true"> <AssignmentDate>07/14/2016</AssignmentDate> <TimestampCreate>07/14/2016 08:56:32:707</TimestampCreate> </Assignment> <Hearing ID="175088126" InternalHearingEventID="1734552990"> <HearingType Word="ADJ">Adjudicatory Hearing</HearingType> <HearingTypeBaseCaseCategory>Criminal</HearingTypeBaseCaseCategory> <HearingTypeBaseCaseCategory>Family</HearingTypeBaseCaseCategory> <TimestampCreate>07/14/2016 08:58:22:160</TimestampCreate> <Setting ID="25760837" InternalSettingID="1625564128" Date="07/14/2016"> <HearingDate>07/14/2016</HearingDate> <StartTime>10:00 AM</StartTime> <EndTime>11:00 AM</EndTime> <CourtSessionName>Ad-Hoc_10-FA-16-40</CourtSessionName> <CourtSessionID ID="3862219" InternalCourtSessionID="1612936893"/> <Calendar Word="10GEN">New General Carver</Calendar> <CalendarBaseCaseCategory>Criminal</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Civil</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Family</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Probate or Mental Health</CalendarBaseCaseCategory> <CourtSessionBlock InternalCourtSessionBlockID="1615773709"> <StartTime>10:00 AM</StartTime> <EndTime>11:00 AM</EndTime> </CourtSessionBlock> <TimestampCreate>07/14/2016 08:58:23:240</TimestampCreate> </Setting> </Hearing> <Hearing ID="175088128" InternalHearingEventID="1734552992" Op="A"> <HearingType Op="A" Word="OFP">Order for Protection Hearing</HearingType> <HearingTypeBaseCaseCategory>Family</HearingTypeBaseCaseCategory> <TimestampCreate Op="A">07/14/2016 09:00:52:680</TimestampCreate> <Setting ID="25760838" InternalSettingID="1625564129" Date="07/14/2016" Op="A"> <HearingDate Op="A">07/14/2016</HearingDate> <StartTime Op="A">2:00 PM</StartTime> <EndTime Op="A">3:00 PM</EndTime> <CourtSessionName>Ad-Hoc_10-FA-16-40</CourtSessionName> <CourtSessionID Op="A" ID="3862221" InternalCourtSessionID="1612936894"/> <Calendar Op="A" Word="10GEN">New General Carver</Calendar> <CalendarBaseCaseCategory>Criminal</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Civil</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Family</CalendarBaseCaseCategory> <CalendarBaseCaseCategory>Probate or Mental Health</CalendarBaseCaseCategory> <CourtSessionBlock InternalCourtSessionBlockID="1615773710"> <StartTime Op="A">2:00 PM</StartTime> <EndTime Op="A">3:00 PM</EndTime> </CourtSessionBlock> <TimestampCreate Op="A">07/14/2016 09:00:52:767</TimestampCreate> </Setting> </Hearing> </Case> <ProtectionOrder InternalProtectionOrderID="2551" xmlns:user="http://tylertechnologies.com"> <Deleted>false</Deleted> <ProtectionOrderNumber>1600329</ProtectionOrderNumber> <Type Word="EXPARTE">Ex Parte Order for Protection</Type> <Statuses> <Status> <Current>true</Current> <Active>No</Active> <Date>07/14/2016</Date> <Type Word="SUPERSEDED">Superseded</Type> <TimestampCreate>07/14/2016 09:00:25:510</TimestampCreate> </Status> </ProtectionOrder> <ProtectionOrder InternalProtectionOrderID="2552" xmlns:user="http://tylertechnologies.com"> <Deleted>false</Deleted> <ProtectionOrderNumber>1600330</ProtectionOrderNumber> <Type Word="EXPARTE">Ex Parte Order for Protection</Type> <Statuses> <Status> <Current>true</Current> <Active>Yes</Active> <Date>07/14/2016</Date> <Type Word="SBJO">Signed By Judicial Officer</Type> <TimestampCreate>07/14/2016 09:00:25:547</TimestampCreate> </Status> </Statuses> </ProtectionOrder> </Integration>
justsomeguy Posted July 20, 2016 Posted July 20, 2016 I don't have much experience with XSLT, but why use the same variable? Why not a second variable to hold the second value? It looks like you have a structure to get the InternalProtectionOrderID attribute, wouldn't you use a similar structure to get the value of the associated ProtectionOrderNumber node?
winkimjr2 Posted July 21, 2016 Author Posted July 21, 2016 I don't have much experience with XSLT, but why use the same variable? Why not a second variable to hold the second value? It looks like you have a structure to get the InternalProtectionOrderID attribute, wouldn't you use a similar structure to get the value of the associated ProtectionOrderNumber node? I did figure out how to use variable in select statement. I wanted to not to duplicate code.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now