Search code examples
xmlxsltedi

XSLT results on the same line?


I have this sample cartoon EDI file –

ISA*00* 00 *ZZ*ASHTB *ZZ*01017 *040315*1005*U*00401*004075123*0*P*:~ GS*HP*ASHTB*01017*20040315*1005*1*X*004010X091A1~ ST*835*07504123~ BPR*H*5.75*C*NON************20040315~ TRN*1*A04B001017.07504*1346000128~ DTM*405*20040308~ N1*PR*ASHTABULA COUNTY ADAMH BD~ N3*4817 STATE ROAD SUITE 203~ N4*ASHTABULA*OH*44004~ N1*PE*LAKE AREA RECOVERY CENTER *FI*346608640~ N3*2801 C. COURT~ N4*ASHTABULA*OH*44004~ REF*PQ*1017~ LX*1~ CLP*444444*1*56.70*56.52*0*MC*0000000655555555*53~ NM1*QC*1*DUC4K*DAFFY*W***MI*1245849~ NM1*82*2*ABTHSOLUTE HELP*****FI*346608640~ REF*F8*A76B04054~ SVC*HC:H0004:HF:H9*-86.76*-86.76**-4~ DTM*150*20040210~ DTM*151*20040211~ CAS*CR*22*0*0*42*0*0~ CAS*OA*22*0*0~ REF*6R*090909~ AMT*AU*86.76~ QTY*NE*53~ LQ*HE*MA92~ PLB*123456*19960930*CV:9876514*-1.27~ SE*27*07504123~ GE*1*1~ IEA*1*004075123~

Which renders this XML in EDI Notepad

  '<?xml version="1.0" encoding="iso-8859-1" ?><Batch>
<Interchange type="ISA" auth-qual="00" security-qual="00" sender-qual="ZZ" sender-id="ASHTB" receiver-qual="ZZ" receiver-id="01017" date="040315" time="1005" standard="U" version="00401" control="004075123" ack="0" test="P" ><FunctionalGroup type="GS" group="HP" sender="ASHTB" receiver="01017" date="20040315" time="1005" control="1" standard="X" version="004010X091A1" ><Document type="835" name="Health Care Claim Payment/Advice">
<RepeatingSegment type="ST">
<Segment type="ST" name="Transaction Set Header">
<Element type="143" name="Transaction Set Identifier Code" value="Health Care Claim Payment/Advice">835</Element>
<Element type="329" name="Transaction Set Control Number">07504123</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="BPR">
<Segment type="BPR" name="Beginning Segment for Payment Order/Remittance Advice">
<Element type="305" name="Transaction Handling Code" value="Notification Only">H</Element>
<Element type="782" name="Monetary Amount">5.75</Element>
<Element type="478" name="Credit/Debit Flag Code" value="Credit">C</Element>
<Element type="591" name="Payment Method Code" value="Non-Payment Data">NON</Element>
<Element type="373" name="Date">20040315</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="TRN">
<Segment type="TRN" name="Trace">
<Element type="481" name="Trace Type Code" value="Current Transaction Trace Numbers">1</Element>
<Element type="127" name="Reference Identification">A04B001017.07504</Element>
<Element type="509" name="Originating Company Identifier">1346000128</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="DTM">
<Segment type="DTM" name="Date/Time Reference">
<Element type="374" name="Date/Time Qualifier" value="Production">405</Element>
<Element type="373" name="Date">20040308</Element>
</Segment>
</RepeatingSegment>
<Loop type="N1">
<RepeatingSegment type="N1">
<Segment type="N1" name="Name">
<Element type="98" name="Entity Identifier Code" value="Payer">PR</Element>
<Element type="93" name="Name">ASHTABULA COUNTY ADAMH BD</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="N3">
<Segment type="N3" name="Address Information">
<Element type="166" name="Address Information">4817 STATE ROAD SUITE 203</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="N4">
<Segment type="N4" name="Geographic Location">
<Element type="19" name="City Name">ASHTABULA</Element>
<Element type="156" name="State or Province Code">OH</Element>
<Element type="116" name="Postal Code">44004</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="N1">
<Segment type="N1" name="Name">
<Element type="98" name="Entity Identifier Code" value="Payee">PE</Element>
<Element type="93" name="Name">LAKE AREA RECOVERY CENTER </Element>
<Element type="66" name="Identification Code Qualifier" value="Federal Taxpayer's Identification Number">FI</Element>
<Element type="67" name="Identification Code">346608640</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="N3">
<Segment type="N3" name="Address Information">
<Element type="166" name="Address Information">2801 C. COURT</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="N4">
<Segment type="N4" name="Geographic Location">
<Element type="19" name="City Name">ASHTABULA</Element>
<Element type="156" name="State or Province Code">OH</Element>
<Element type="116" name="Postal Code">44004</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="REF">
<Segment type="REF" name="Reference Identification">
<Element type="128" name="Reference Identification Qualifier" value="Payee Identification">PQ</Element>
<Element type="127" name="Reference Identification">1017</Element>
</Segment>
</RepeatingSegment>
</Loop>
<Loop type="LX">
<RepeatingSegment type="LX">
<Segment type="LX" name="Assigned Number">
<Element type="554" name="Assigned Number">1</Element>
</Segment>
</RepeatingSegment>
<Loop type="CLP">
<RepeatingSegment type="CLP">
<Segment type="CLP" name="Claim Level Data">
<Element type="1028" name="Claim Submitter's Identifier">444444</Element>
<Element type="1029" name="Claim Status Code" value="Processed as Primary">1</Element>
<Element type="782" name="Monetary Amount">56.70</Element>
<Element type="782" name="Monetary Amount">56.52</Element>
<Element type="782" name="Monetary Amount">0</Element>
<Element type="1032" name="Claim Filing Indicator Code" value="Medicaid">MC</Element>
<Element type="127" name="Reference Identification">0000000655555555</Element>
<Element type="1331" name="Facility Code Value">53</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="NM1">
<Segment type="NM1" name="Individual or Organizational Name">
<Element type="98" name="Entity Identifier Code" value="Patient">QC</Element>
<Element type="1065" name="Entity Type Qualifier" value="Person">1</Element>
<Element type="1035" name="Name Last or Organization Name">DUC4K</Element>
<Element type="1036" name="Name First">DAFFY</Element>
<Element type="1037" name="Name Middle">W</Element>
<Element type="66" name="Identification Code Qualifier" value="Member Identification Number">MI</Element>
<Element type="67" name="Identification Code">1245849</Element>
</Segment>
<Segment type="NM1" name="Individual or Organizational Name">
<Element type="98" name="Entity Identifier Code" value="Rendering Provider">82</Element>
<Element type="1065" name="Entity Type Qualifier" value="Non-Person Entity">2</Element>
<Element type="1035" name="Name Last or Organization Name">ABTHSOLUTE HELP</Element>
<Element type="66" name="Identification Code Qualifier" value="Federal Taxpayer's Identification Number">FI</Element>
<Element type="67" name="Identification Code">346608640</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="REF">
<Segment type="REF" name="Reference Identification">
<Element type="128" name="Reference Identification Qualifier" value="Original Reference Number">F8</Element>
<Element type="127" name="Reference Identification">A76B04054</Element>
</Segment>
</RepeatingSegment>
<Loop type="SVC">
<RepeatingSegment type="SVC">
<Segment type="SVC" name="Service Information">
<Element type="235" name="Product/Service ID Qualifier" value="Health Care Financing Administration Common Procedural Coding System (HCPCS) ">HC</Element>
<Element type="234" name="Product/Service ID">H0004</Element>
<Element type="1339" name="Procedure Modifier">HF</Element>
<Element type="1339" name="Procedure Modifier">H9</Element>
<Element type="782" name="Monetary Amount">-86.76</Element>
<Element type="782" name="Monetary Amount">-86.76</Element>
<Element type="380" name="Quantity">-4</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="DTM">
<Segment type="DTM" name="Date/Time Reference">
<Element type="374" name="Date/Time Qualifier" value="Service Period Start">150</Element>
<Element type="373" name="Date">20040210</Element>
</Segment>
<Segment type="DTM" name="Date/Time Reference">
<Element type="374" name="Date/Time Qualifier" value="Service Period End">151</Element>
<Element type="373" name="Date">20040211</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="CAS">
<Segment type="CAS" name="Claims Adjustment">
<Element type="1033" name="Claim Adjustment Group Code" value="Correction and Reversals">CR</Element>
<Element type="1034" name="Claim Adjustment Reason Code">22</Element>
<Element type="782" name="Monetary Amount">0</Element>
<Element type="380" name="Quantity">0</Element>
<Element type="1034" name="Claim Adjustment Reason Code">42</Element>
<Element type="782" name="Monetary Amount">0</Element>
<Element type="380" name="Quantity">0</Element>
</Segment>
<Segment type="CAS" name="Claims Adjustment">
<Element type="1033" name="Claim Adjustment Group Code" value="Other adjustments">OA</Element>
<Element type="1034" name="Claim Adjustment Reason Code">22</Element>
<Element type="782" name="Monetary Amount">0</Element>
<Element type="380" name="Quantity">0</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="REF">
<Segment type="REF" name="Reference Identification">
<Element type="128" name="Reference Identification Qualifier" value="Provider Control Number">6R</Element>
<Element type="127" name="Reference Identification">090909</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="AMT">
<Segment type="AMT" name="Monetary Amount">
<Element type="522" name="Amount Qualifier Code" value="Coverage Amount">AU</Element>
<Element type="782" name="Monetary Amount">86.76</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="QTY">
<Segment type="QTY" name="Quantity">
<Element type="673" name="Quantity Qualifier" value="Non-Covered - Estimated">NE</Element>
<Element type="380" name="Quantity">53</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="LQ">
<Segment type="LQ" name="Industry Code">
<Element type="1270" name="Code List Qualifier Code" value="Claim Payment Remark Codes">HE</Element>
<Element type="1271" name="Industry Code">MA92</Element>
</Segment>
</RepeatingSegment>
</Loop>
</Loop>
</Loop>
<RepeatingSegment type="PLB">
<Segment type="PLB" name="Provider Level Adjustment">
<Element type="127" name="Reference Identification">123456</Element>
<Element type="373" name="Date">19960930</Element>
<Element type="426" name="Adjustment Reason Code" value="Capital Passthru">CV</Element>
<Element type="127" name="Reference Identification">9876514</Element>
<Element type="782" name="Monetary Amount">-1.27</Element>
</Segment>
</RepeatingSegment>
<RepeatingSegment type="SE">
<Segment type="SE" name="Transaction Set Trailer">
<Element type="96" name="Number of Included Segments">27</Element>
<Element type="329" name="Transaction Set Control Number">07504123</Element>
</Segment>
</RepeatingSegment>
</Document>
</FunctionalGroup>
</Interchange>
</Batch>'

**When I apply this XSLT**

<?xml version="1.0" encoding="utf-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" indent="no"/>
  <xsl:strip-space elements="*"/>
  <xsl:strip-space  elements="*"/>

  <xsl:template match="*|@*">
    <xsl:apply-templates/>
    <xsl:value-of select="','"/>
    <xsl:text>&#xa;</xsl:text>


    <xsl:value-of select="','"/>
  </xsl:template>
  <xsl:template match="text()">
    <xsl:value-of select="."/>
    <xsl:if test="../following-sibling::*/text()">
      <xsl:text>,</xsl:text>
    </xsl:if>
  </xsl:template>

</xsl:transform>

* I get these results*

00,,
,,
,00,,
,,
,ZZ,,
,ASHTB          ,,
,ZZ,,
,01017          ,,
,040315,,
,1005,,
,U,,
,00401,,
,004075123,,
,0,,
,P,
,,
,,
,,
,,
,HP,,
,ASHTB,,
,01017,,
,20040315,,
,1005,,
,1,,
,X,,
,004010X091A1,
,,
,835,,
,07504123,
,,
,H,,
,5.75,,
,C,,
,NON,,
,,
,,
,,
,,
,,
,,
,,
,,
,,
,,
,,
,20040315,
,,
,1,,
,A04B001017.07504,,
,1346000128,
,,
,405,,
,20040308,
,,
,PR,,
,ASHTABULA COUNTY ADAMH BD,
,,
,4817 STATE ROAD SUITE 203,
,,
,ASHTABULA,,
,OH,,
,44004,
,,
,,
,PE,,
,LAKE AREA RECOVERY CENTER ,,
,FI,,
,346608640,
,,
,2801 C. COURT,
,,
,ASHTABULA,,
,OH,,
,44004,
,,
,PQ,,
,1017,
,,
,,
,1,
,,
,444444,,
,1,,
,56.70,,
,56.52,,
,0,,
,MC,,
,0000000655555555,,
,53,
,,
,QC,,
,1,,
,DUC4K,,
,DAFFY,,
,W,,
,,
,,
,MI,,
,1245849,
,,
,82,,
,2,,
,ABTHSOLUTE HELP,,
,,
,,
,,
,,
,FI,,
,346608640,
,,
,F8,,
,A76B04054,
,,
,HC,,
,H0004,,
,HF,,
,H9,
,,
,-86.76,,
,-86.76,,
,,
,-4,
,,
,150,,
,20040210,
,,
,151,,
,20040211,
,,
,CR,,
,22,,
,0,,
,0,,
,42,,
,0,,
,0,
,,
,OA,,
,22,,
,0,,
,0,
,,
,6R,,
,090909,
,,
,AU,,
,86.76,
,,
,NE,,
,53,
,,
,HE,,
,MA92,
,,
,,
,,
,,
,123456,,
,19960930,,
,CV,,
,9876514,
,,
,-1.27,
,,
,27,,
,07504123,
,,
,,
,1,,
,1,
,,
,,
,1,,
,004075123,
,,
,,

,

Which are the results I want – commas replacing the segment line terminator ~. However I need all these results on the same line, and if a bundled situation exists, those results on a new line. I do not know how to achieve that? The empty fields created by the commas are ok, I can process those out later, I just need all fields and the edi segment terminator ~ replaced with a comma and not concatenated to other fields.

It seems there is something easy here i am missing, am I'm new to XSLT thanks for any assistance.


Solution

  • When you use this:

      <xsl:template match="*|@*">
        <xsl:apply-templates/>
        <xsl:value-of select="','"/>
        <xsl:text>&#xa;</xsl:text>
    

    You are inserting the (linefeed) character after every element (your template applies for any element * or any attribute @*). Instead of it, you should use it on a template for only RepeatingSegment elements, like this:

    <xsl:template match="RepeatingSegment">
      <xsl:apply-templates/>
      <xsl:text>&#xa;</xsl:text>
    </xsl:template>
    

    Hope this helps.