Member 11403304 Ответов: 1

Как я могу обновить свой XSLT, чтобы он отображал правильный вывод?


Мой первый xml-документ имеет ProtectionOrder, который не удаляется. Вывод, отображаемый моим xslt, является правильным.
Второй xml-документ имеет ProtectionOrder, который был удален. Выводе мой XSLT-это не работает.

Как сделать так, чтобы мой xslt работал для каждого из двух xml-документов?

Ожидаемый вывод для ProtectionOrderStatus для ProtectionOrder, который не был удален xml-документ Это работает на меня.

<ext:ProtectionOrderStatus>
			<ext:ProtectionOrderStatusCode>SBJO</ext:ProtectionOrderStatusCode>
			<ext:ProtectionOrderStatusDate>2017-03-17</ext:ProtectionOrderStatusDate>
		</ext:ProtectionOrderStatus>


XML-входной документ для защитного порядка, который не удаляется

<Integration>
	<ControlPoint Timestamp="3/17/2017 10:20:59 AM">SAVE-PROTECTION-ORDER</ControlPoint>
	<ProtectionOrder Op="E">
		<Deleted>false</Deleted>
		<ProtectionOrderNumber>1700063</ProtectionOrderNumber>
		<Issued>03/17/2017</Issued>
		<Statuses>
			<Status Op="A">
				<Current>true</Current>
				<Active>Yes</Active>
				<Date Op="A">03/17/2017</Date>
				<Type Op="A" Word="SBJO">Signed By Judicial Officer</Type>
				<TimestampCreate Op="A">03/17/2017 10:20:59:350</TimestampCreate>
			</Status>
		</Statuses>
		<TimestampCreate>03/17/2017 10:20:28:403</TimestampCreate>
		<TimestampChange>03/17/2017 10:20:59:350</TimestampChange>
	</ProtectionOrder>
</Integration>

Ожидаемый результат при удалении ProtectionOrder
Это не работает для меня.
xml doc для ProtectionOrder, который удаляется

<ext:ProtectionOrderStatus>
    			<ext:ProtectionOrderStatusCode>DELETED</ext:ProtectionOrderStatusCode>
    			<ext:ProtectionOrderStatusDate>2017-03-17</ext:ProtectionOrderStatusDate>
    		</ext:ProtectionOrderStatus>


Ниже приведен мой вывод, который является неправильным

<ext:ProtectionOrderStatus>
    			<ext:ProtectionOrderStatusCode/>
    			<ext:ProtectionOrderStatusDate>2017-03-16</ext:ProtectionOrderStatusDate>
    		</ext:ProtectionOrderStatus>
    <ProtectionOrderStatus>SBJO<ProtectionOrderStatusDate>03/17/2017</ProtectionOrderStatusDate>
    </ProtectionOrderStatus>


xslt-код

<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:mscef="courts.state.mn.us/extfun" xmlns:ext="http://www.courts.state.mn.us/ProtectionOrderExtension/1.0">
    <!--ext:ProtectionOrderStatus-->
    			<xsl:variable name="vCurrentTimestamp">
    				<xsl:choose>
    					<xsl:when test="count(/Integration/ControlPoint)>0">
    						<xsl:value-of select="mscef:formatDateTimeNumeric(string(/Integration/ControlPoint/@Timestamp))"/>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="mscef:currentDateTimeNumeric()"/>
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:variable>
    			<xsl:variable name="vStatusDate" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vCurrentTimestamp][1]/Date"/>
    			<xsl:variable name="vStatusWord" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vCurrentTimestamp][1]/Type/@Word"/>
    			<ext:ProtectionOrderStatus>
    				<xsl:choose>
    					<xsl:when test="Deleted='true'">
    						<ext:ProtectionOrderStatusCode>DELETED</ext:ProtectionOrderStatusCode>
    					</xsl:when>
    				<xsl:otherwise>
    						<xsl:value-of select="$vStatusWord"/>
    					</xsl:otherwise>
    				</xsl:choose>
    				<ext:ProtectionOrderStatusDate>
    					<xsl:value-of select="mscef:formatDate(string($vStatusDate))"/>
    				</ext:ProtectionOrderStatusDate>
    			</ext:ProtectionOrderStatus>
    			
    	<msxsl:script language="JScript" implements-prefix="mscef"><![CDATA[
    		  function currentDateTime(){
       var oDate=new Date();
       return formatDateTime(oDate.toString());
      }
      function formatTime(sTime){
       if(sTime.length==0){
        return "";
       }
       else{
        var oDate=new Date(sTime);
        var str = oDate.getSeconds();
        return padZeroes(oDate.getHours().toString(),2) + ":"  +  padZeroes(oDate.getMinutes(),2) + ":" +  padZeroes(oDate.getSeconds(),2) + "-" + padZeroes(oDate.getTimezoneOffset() / 60,2) + ":00";     
       }
      }
      function formatDate(sDate){
       if(sDate.length==0){
        return "";
       }
       else{
        var oDate=new Date(sDate);
        var str = oDate.getSeconds();
        return oDate.getFullYear() + "-" +  padZeroes(oDate.getMonth() + 1,2) + "-" +  padZeroes(oDate.getDate(),2);     
       }
      }
      function formatDateTime(sDate){
       if(sDate.length==0){
        return "";
       }
       else{
        var oDate=new Date(sDate);
        var str = oDate.getSeconds();
        return oDate.getFullYear() + "-" +  padZeroes(oDate.getMonth() + 1,2) + "-" +  padZeroes(oDate.getDate(),2) + "T" + padZeroes(oDate.getHours().toString(),2) + ":"  +  padZeroes(oDate.getMinutes(),2) + ":" +  padZeroes(oDate.getSeconds(),2) + "-" + padZeroes(oDate.getTimezoneOffset() / 60,2) + ":00";     
       }
      }
    		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 version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:mscef="courts.state.mn.us/extfun" xmlns:ext="http://www.courts.state.mn.us/ProtectionOrderExtension/1.0">
    <!--ext:ProtectionOrderStatus-->
    			<xsl:variable name="vCurrentTimestamp">
    				<xsl:choose>
    					<xsl:when test="count(/Integration/ControlPoint)>0">
    						<xsl:value-of select="mscef:formatDateTimeNumeric(string(/Integration/ControlPoint/@Timestamp))"/>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="mscef:currentDateTimeNumeric()"/>
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:variable>
    			<xsl:variable name="vStatusDate" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vCurrentTimestamp][1]/Date"/>
    			<xsl:variable name="vStatusWord" select="Statuses/Status[mscef:formatDateTimeNumeric(mscef:fixOdysseyTimestamp(string(TimestampCreate))) <=$vCurrentTimestamp][1]/Type/@Word"/>
    			<ext:ProtectionOrderStatus>
    				<xsl:choose>
    					<xsl:when test="Deleted='true'">
    						<ext:ProtectionOrderStatusCode>DELETED</ext:ProtectionOrderStatusCode>
    					</xsl:when>
    				<xsl:otherwise>
    						<xsl:value-of select="$vStatusWord"/>
    					</xsl:otherwise>
    				</xsl:choose>
    				<ext:ProtectionOrderStatusDate>
    					<xsl:value-of select="mscef:formatDate(string($vStatusDate))"/>
    				</ext:ProtectionOrderStatusDate>
    			</ext:ProtectionOrderStatus>
    			
    	<msxsl:script language="JScript" implements-prefix="mscef"><![CDATA[
    		  function currentDateTime(){
       var oDate=new Date();
       return formatDateTime(oDate.toString());
      }
      function formatTime(sTime){
       if(sTime.length==0){
        return "";
       }
       else{
        var oDate=new Date(sTime);
        var str = oDate.getSeconds();
        return padZeroes(oDate.getHours().toString(),2) + ":"  +  padZeroes(oDate.getMinutes(),2) + ":" +  padZeroes(oDate.getSeconds(),2) + "-" + padZeroes(oDate.getTimezoneOffset() / 60,2) + ":00";     
       }
      }
      function formatDate(sDate){
       if(sDate.length==0){
        return "";
       }
       else{
        var oDate=new Date(sDate);
        var str = oDate.getSeconds();
        return oDate.getFullYear() + "-" +  padZeroes(oDate.getMonth() + 1,2) + "-" +  padZeroes(oDate.getDate(),2);     
       }
      }
      function formatDateTime(sDate){
       if(sDate.length==0){
        return "";
       }
       else{
        var oDate=new Date(sDate);
        var str = oDate.getSeconds();
        return oDate.getFullYear() + "-" +  padZeroes(oDate.getMonth() + 1,2) + "-" +  padZeroes(oDate.getDate(),2) + "T" + padZeroes(oDate.getHours().toString(),2) + ":"  +  padZeroes(oDate.getMinutes(),2) + ":" +  padZeroes(oDate.getSeconds(),2) + "-" + padZeroes(oDate.getTimezoneOffset() / 60,2) + ":00";     
       }
      }
    		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>

Afzaal Ahmad Zeeshan

Но, что именно ожидается, и как результат не ожидается?

1 Ответов

Рейтинг:
0

Member 11403304

Я показал, как должен выглядеть вывод, когда ProtectionOrder удаляется во входном документе xml, а также когда ProtectionOrder не удаляется во входном документе xml.
Мой XSLT-код работает для ProtectionOrder, который не был удален.
Для удаляемого ProtectionOrder он отображает пустой элемент<ext:protectionorderstatuscode & gt;.


Member 11403304

Когда xml-документ не имеет ProtectionOrder удален как true, я не получаю правильный вывод.