Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How do I get out put for required elements? 1

Status
Not open for further replies.

momo2000

Programmer
Jan 2, 2015
63
0
0
US
My xslt code is return correct output when TransactionTypeText='Charge', TransactionTypeText='Payment', TransactionTypeText='Credit', and TransactionTypeText='Disbursement'.

I would like to add code so I also get the output when TransactionTypeText is other than Charge, Payment, Credit or Disbursement. When the TranscationTypeText is not any of the 4, I would like to get the amounts from any of the source columns from the xml deocument.
For each row, only one of the sourse columns should have a non-zero value. If a row has more than one non-zero source columns, I return an exception which is in my xslt stylesheet

Her xslt is working when the xml document has TransactionTypeText='Charge', TransactionTypeText='Payment', TransactionTypeText='Credit', and TransactionTypeText='Disbursement'
However for example when the xml document has TransactionTypeText='Adjustment', I get an error Unknown transaction type Adjustment.

How do I modify my xslt code to handle other TransactionTypeText?

Expected output should look like this
XML:
<FinancialDetail>
	<FinancialTransaction>
		<TransactionID>1639560336</TransactionID>
		<TransactionTypeText>Charge</TransactionTypeText>
		<TransactionDate>2016-07-11</TransactionDate>
		<TransactionFeeDetail>
			<FeeDetailID>1650110685</FeeDetailID>
			<FeeDetailFeeCodeText code="REST">Restitution</FeeDetailFeeCodeText>
			<FeeDetailFeeAmount>500</FeeDetailFeeAmount>
		</TransactionFeeDetail>
		<TransactionCommentText/>
		<TransactionPaymentCreditTypeText/>
	</FinancialTransaction>
	<FinancialTransaction>
		<TransactionID>1639560337</TransactionID>
		<TransactionTypeText>Adjustment</TransactionTypeText>
		<TransactionDate>2016-07-11</TransactionDate>
		<TransactionFeeDetail>
			<FeeDetailID>1650110685</FeeDetailID>
			<FeeDetailFeeCodeText code="REST">Restitution</FeeDetailFeeCodeText>
			<FeeDetailFeeAmount>-500</FeeDetailFeeAmount>
		</TransactionFeeDetail>
		<TransactionCommentText>Testing</TransactionCommentText>
		<TransactionPaymentCreditTypeText/>
	</FinancialTransaction>
</FinancialDetail>

xslt code

Code:
<xsl:stylesheet version="1.0" xmlns="[URL unfurl="true"]http://www.courts.state.mn.us/CourtXML/3"[/URL] xmlns:msc="[URL unfurl="true"]http://www.courts.state.mn.us/CourtXML/3"[/URL] xmlns:xsl="[URL unfurl="true"]http://www.w3.org/1999/XSL/Transform"[/URL] xmlns:mscef="courts.state.mn.us/extfun" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="mscef msxsl msc">
	<xsl:output method="xml" encoding="UTF-8"/>
	<xsl:template name="FinancialDetailType">
		<xsl:for-each select="ancestor::Integration/FinancialDetail/Transaction[count(TransactionFeeDetail[FeeDetailFeeCode='REST'])>0]">
			<FinancialTransaction>
				<TransactionID>
					<xsl:value-of select="TransactionID"/>
				</TransactionID>
				<TransactionTypeText>
					<xsl:value-of select="TransactionTypeText"/>
				</TransactionTypeText>
				<TransactionDate>
					<xsl:value-of select="substring(TransactionDate,1,10)"/>
				</TransactionDate>
				<xsl:for-each select="TransactionFeeDetail[FeeDetailFeeCode='REST']">
					<TransactionFeeDetail>
						<FeeDetailID>
							<xsl:value-of select="FeeDetailID"/>
						</FeeDetailID>
						<FeeDetailFeeCodeText>
							<xsl:attribute name="code">
								<xsl:value-of select="FeeDetailFeeCode"/>
							</xsl:attribute>
							<xsl:value-of select="FeeDetailFeeCodeText"/>
						</FeeDetailFeeCodeText>
						<FeeDetailFeeAmount>
							<xsl:choose>
								<xsl:when test="../TransactionTypeText='Charge'">
									<xsl:value-of select="mscef:formatCurrency(string(ChargeAmount))"/>
								</xsl:when>
								<xsl:when test="../TransactionTypeText='Payment'">
									<xsl:value-of select="mscef:formatCurrency(string(PaymentAmount))"/>
								</xsl:when>
								<xsl:when test="../TransactionTypeText='Credit'">
									<xsl:value-of select="mscef:formatCurrency(string(CreditAmount))"/>
								</xsl:when>
								<xsl:when test="../TransactionTypeText='Disbursement'">
									<xsl:value-of select="mscef:formatCurrency(string(DisbursementAmount))"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:message terminate="yes">Unknown transaction type. <xsl:value-of select="../TransactionTypeText"/>
									</xsl:message>
								</xsl:otherwise>
							</xsl:choose>
						</FeeDetailFeeAmount>
					</TransactionFeeDetail>
				</xsl:for-each>
				<TransactionCommentText>
					<xsl:value-of select="TransactionCommentText"/>
				</TransactionCommentText>
				<TransactionPaymentCreditTypeText>
					<xsl:value-of select="TransactionPaymentCreditTypeText"/>
				</TransactionPaymentCreditTypeText>
			</FinancialTransaction>
		</xsl:for-each>
	</xsl:template>
	<msxsl:script language="JScript" implements-prefix="mscef">
	<![CDATA[
		
		function formatCurrency(asCurrency){
			asCurrency = asCurrency.replace("\$","");
			asCurrency = asCurrency.replace("\,","");
			return parseFloat(asCurrency);
		}
		function formatTwoDecimalCurrency(asCurrency){
		    if(asCurrency.length==0){
			return "";
			}
			asCurrency = asCurrency.replace("\$","");
			asCurrency = asCurrency.replace("\,","");
			return parseFloat(asCurrency).toFixed(2);
		}
	]]></msxsl:script>
</xsl:stylesheet>

xml document
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Pipeline xmlns="">
	<SourceXML>
		<Integration>
			<Case InternalID="1612988653" ID="5226206" xmlns:user="[URL unfurl="true"]http://tylertechnologies.com">[/URL]
			</Case>
			<FinancialDetail>
				<Transaction>
					<TransactionID>1621246445</TransactionID>
					<TransactionTypeText>Charge</TransactionTypeText>
					<TransactionDate>2010-06-30T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1624242662</FeeDetailID>
						<FeeDetailFeeCode>CRMTRAF5</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Crim/Traffic Surcharge 2005</FeeDetailFeeCodeText>
						<ChargeAmount>72.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242663</FeeDetailID>
						<FeeDetailFeeCode>LAWLIBCR</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Law Library Criminal</FeeDetailFeeCodeText>
						<ChargeAmount>10.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242664</FeeDetailID>
						<FeeDetailFeeCode>MUNICCTY</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Municipal Fines-County Share</FeeDetailFeeCodeText>
						<ChargeAmount>233.3800</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242665</FeeDetailID>
						<FeeDetailFeeCode>10CHAS23</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Chaska (0300) 2/3</FeeDetailFeeCodeText>
						<ChargeAmount>466.6200</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242666</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>3.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242667</FeeDetailID>
						<FeeDetailFeeCode>PROSCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Prosecution Costs</FeeDetailFeeCodeText>
						<ChargeAmount>700.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
				</Transaction>
				<Transaction>
					<TransactionID>1621279946</TransactionID>
					<TransactionTypeText>Charge</TransactionTypeText>
					<TransactionDate>2010-07-06T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1624281693</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>20.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
				</Transaction>
				<Transaction>
					<TransactionID>1621541452</TransactionID>
					<TransactionTypeText>Payment</TransactionTypeText>
					<TransactionDate>2010-08-06T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1624242664</FeeDetailID>
						<FeeDetailFeeCode>MUNICCTY</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Municipal Fines-County Share</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>32.2800</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242665</FeeDetailID>
						<FeeDetailFeeCode>10CHAS23</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Chaska (0300) 2/3</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>64.5400</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242666</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.4100</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624281693</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>2.7700</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
				</Transaction>
				<Transaction>
					<TransactionID>1621746487</TransactionID>
					<TransactionTypeText>Disbursement</TransactionTypeText>
					<TransactionDate>2010-09-01T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1624242664</FeeDetailID>
						<FeeDetailFeeCode>MUNICCTY</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Municipal Fines-County Share</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>32.2800</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242665</FeeDetailID>
						<FeeDetailFeeCode>10CHAS23</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Chaska (0300) 2/3</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>64.5400</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624242666</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.4100</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
					<TransactionFeeDetail>
						<FeeDetailID>1624281693</FeeDetailID>
						<FeeDetailFeeCode>CRTCOSTS</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Court Costs</FeeDetailFeeCodeText>
						<ChargeAmount>0.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>2.7700</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
						<RecipientAccountID>1610014856</RecipientAccountID>
						<NameLast>MN Department of Finance</NameLast>
					</TransactionFeeDetail>
				</Transaction>
				<Transaction>
					<TransactionID>1639560336</TransactionID>
					<TransactionTypeText>Charge</TransactionTypeText>
					<TransactionDate>2016-07-11T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1650110685</FeeDetailID>
						<FeeDetailFeeCode>REST</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Restitution</FeeDetailFeeCodeText>
						<ChargeAmount>500.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
					</TransactionFeeDetail>
				</Transaction>
				<Transaction>
					<TransactionID>1639560337</TransactionID>
					<TransactionCommentText>Testing</TransactionCommentText>
					<TransactionTypeText>Adjustment</TransactionTypeText>
					<TransactionDate>2016-07-11T00:00:00</TransactionDate>
					<TransactionFeeDetail>
						<FeeDetailID>1650110685</FeeDetailID>
						<FeeDetailFeeCode>REST</FeeDetailFeeCode>
						<FeeDetailFeeCodeText>Restitution</FeeDetailFeeCodeText>
						<ChargeAmount>-500.0000</ChargeAmount>
						<CreditAmount>0.0000</CreditAmount>
						<DisbursementAmount>0.0000</DisbursementAmount>
						<PaymentAmount>0.0000</PaymentAmount>
					</TransactionFeeDetail>
				</Transaction>
			</FinancialDetail>
		</Integration>
	</SourceXML>
	<CourtXML/>
	<CaseOptions xmlns="[URL unfurl="true"]http://www.courts.state.mn.us/CourtXML/3">[/URL]
		<FinancialSummary>
			<SelectedIndicator>true</SelectedIndicator>
		</FinancialSummary>
		<FinancialDetail>
			<SelectedIndicator>true</SelectedIndicator>
		</FinancialDetail>
	</CaseOptions>
</Pipeline>
 
Row? Column? Using this spreadsheet terminology (ehich may make sense to you, perhaps because you see the result in a spreadsheet?)requires an extra step of 'unwinding' in order to get to your question. Explanations that use the XML terminology directly are more helpful. That said, let's change the <xsl:eek:therwise>...

Code:
<xsl:otherwise>
	<xsl:choose>
	<xsl:when test="count((ChargeAmount | PaymentAmount | CreditAmount | DisbursementAmount)[number() != 0]) = 1">
		<xsl:for-each select="(ChargeAmount | PaymentAmount | CreditAmount | DisbursementAmount)[number() != 0]">
		<xsl:comment>For transaction type <xsl:value-of select="../../TransactionTypeText"/> the <xsl:value-of select="local-name(.)"/> is <xsl:value-of select="."/></xsl:comment> 
		</xsl:for-each>
	</xsl:when>
	<xsl:otherwise>
		<xsl:message terminate="yes">Unknown or invalid transaction type. <xsl:value-of select="../TransactionTypeText"/>
		</xsl:message>
	</xsl:otherwise>
	</xsl:choose>
</xsl:otherwise>

Key to understanding this is the following:
Code:
(ChargeAmount | PaymentAmount | CreditAmount | DisbursementAmount)[number() != 0]
This XPath expression can be read left to right:
[ul]
[li]Take the union of the nodes ChargeAmount, PaymentAmount, CreditAmount, and DisbursementAmount[/li]
[li]Select from those four nodes the nodes whose numeric value is non-zero[/li]
[/ul]

So, if the count of non-zero nodes is 1, then you have the condition (I think) you describe in your requirement. Since we know the XPath expression describes only one node, we can use for-each to switch context to that non-zero node, where we can use local-name() to describe the node that has a non-zero value.
Code:
<FeeDetailFeeAmount>
<!--For transaction type Adjustment the ChargeAmount is -500.0000-->
</FeeDetailFeeAmount>

Tom Morrison
Hill Country Software
 
Tom, I have added expected output here. This output is when the xml document has
XML:
<TransactionTypeText>Adjustment</TransactionTypeText>
. However this TransactionTypeText could be anything.

XML:
<FinancialDetail>
	<FinancialTransaction>
		<TransactionID>1639560336</TransactionID>
		<TransactionTypeText>Charge</TransactionTypeText>
		<TransactionDate>2016-07-11</TransactionDate>
		<TransactionFeeDetail>
			<FeeDetailID>1650110685</FeeDetailID>
			<FeeDetailFeeCodeText code="REST">Restitution</FeeDetailFeeCodeText>
			<FeeDetailFeeAmount>500</FeeDetailFeeAmount>
		</TransactionFeeDetail>
		<TransactionCommentText/>
		<TransactionPaymentCreditTypeText/>
	</FinancialTransaction>
	<FinancialTransaction>
		<TransactionID>1639560337</TransactionID>
		<TransactionTypeText>Adjustment</TransactionTypeText>
		<TransactionDate>2016-07-11</TransactionDate>
		<TransactionFeeDetail>
			<FeeDetailID>1650110685</FeeDetailID>
			<FeeDetailFeeCodeText code="REST">Restitution</FeeDetailFeeCodeText>
			<FeeDetailFeeAmount>-500</FeeDetailFeeAmount>
		</TransactionFeeDetail>
		<TransactionCommentText>Testing</TransactionCommentText>
		<TransactionPaymentCreditTypeText/>
	</FinancialTransaction>
</FinancialDetail>
 
Have a look at the <xsl:comment> and see if you can replace it with something that you want. It is not dependent on 'Adjustment'. For example, you might consider replacing the xsl:comment with [tt]<xsl:value-of select="."/>[/tt].

Also, as a courtesy to the next folks who might look at this thread (probably won't be a lot), refrain from editing a post which precedes an answer, because it adds confusion. I still remember the original post and it confuses me...

Tom Morrison
Hill Country Software
 
Thank you for your help and advice especially about editing original posting after an answer have been provided. I will keep that in mind. Again thanks for helping out. I am learning xslt and xml.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top