Как я могу обновить свой 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
Но, что именно ожидается, и как результат не ожидается?