INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Jobs

How do I get out put for required elements?

How do I get out put for required elements?

(OP)
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

CODE --> 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 --> xslt

<xsl:stylesheet version="1.0" xmlns="http://www.courts.state.mn.us/CourtXML/3" xmlns:msc="http://www.courts.state.mn.us/CourtXML/3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 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

CODE --> xml

<?xml version="1.0" encoding="UTF-8"?>
<Pipeline xmlns="">
	<SourceXML>
		<Integration>
			<Case InternalID="1612988653" ID="5226206" xmlns:user="http://tylertechnologies.com">
			</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="http://www.courts.state.mn.us/CourtXML/3">
		<FinancialSummary>
			<SelectedIndicator>true</SelectedIndicator>
		</FinancialSummary>
		<FinancialDetail>
			<SelectedIndicator>true</SelectedIndicator>
		</FinancialDetail>
	</CaseOptions>
</Pipeline> 

RE: How do I get out put for required elements?

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:otherwise>...

CODE --> XSLT_fragment

<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 --> XPath

(ChargeAmount | PaymentAmount | CreditAmount | DisbursementAmount)[number() != 0] 
This XPath expression can be read left to right:
  • Take the union of the nodes ChargeAmount, PaymentAmount, CreditAmount, and DisbursementAmount
  • Select from those four nodes the nodes whose numeric value is non-zero
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 --> XML_Output

<FeeDetailFeeAmount>
<!--For transaction type Adjustment the ChargeAmount is -500.0000-->
</FeeDetailFeeAmount> 

Tom Morrison
Hill Country Software

RE: How do I get out put for required elements?

(OP)
Tom, I have added expected output here. This output is when the xml document has

CODE --> xml

<TransactionTypeText>Adjustment</TransactionTypeText> 
. However this TransactionTypeText could be anything.

CODE --> 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> 

RE: How do I get out put for required elements?

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 <xsl:value-of select="."/>.

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

RE: How do I get out put for required elements?

(OP)
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.

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Resources

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close