【问题标题】:HIPAA 5010 to csv via XSLT - Loop Path issue?通过 XSLT 将 HIPAA 5010 转换为 csv - 循环路径问题?
【发布时间】:2014-08-13 01:19:03
【问题描述】:

我正在尝试学习一些用于从 EDi 837/835 文件中提取数据的 XLST。下面将从循环 2100 中指定的字段放入 cvs 格式,但不是循环 2110 中的字段。它下面的样式表将返回循环 2110 中的字段,而不是 2100。我如何组合循环以返回来自2100 和 2110 在 1 个样式表中?我尝试了几个选项,但以 csv 格式返回所有字段均未成功。有任何想法吗?任何帮助是极大的赞赏。 835 测试文件 id 在底部。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="text" indent="yes"/>

<xsl:template match="Interchange">
<xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop 
  [@LoopId='2100']"/>
 </xsl:template>


 <xsl:template match="Loop[@LoopId='2100'] "> 
<xsl:variable name="trans" select="../../."/>
<xsl:variable name="payer" select="../../Loop[@LoopId='1000A']"/>
<xsl:variable name="payee" select="../../Loop[@LoopId='1000B']"/>
<xsl:variable name="payment" select="."/>
 <xsl:variable name="cas" select="../../Loop[@LoopId='2110']"/>
 <xsl:variable name="caxx" select="."/>

<xsl:value-of select="$trans/BPR/BPR16"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$caxx/N1/N102"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payee/N1/N102"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payee/N1/N104"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP01"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP02"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP03"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/NM1[NM101='QC']/NM103"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/NM1[NM101='QC']/NM104"/>
<xsl:value-of select="','"/>





 <xsl:value-of select="$cas/DTM[DTM01='472']/DTM02"/>
<xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='CO']/CAS01"/>
 <xsl:value-of select="','"/>
  <xsl:value-of select="$payment/CAS[CAS01='CO']/CAS02"/>
 <xsl:value-of select="','"/>
      <xsl:value-of select="$payment/CAS[CAS01='CR']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='CR']/CAS02"/>
 <xsl:value-of select="','"/>
      <xsl:value-of select="$payment/CAS[CAS01='OA']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='OA']/CAS02"/>
 <xsl:value-of select="','"/>
         <xsl:value-of select="$payment/CAS[CAS01='PI']/CAS01"/>
 <xsl:value-of select="','"/>
  <xsl:value-of select="$payment/CAS[CAS01='PI']/CAS02"/>
 <xsl:value-of select="','"/>
<xsl:value-of select="$payment/CAS[CAS01='PR']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='PR']/CAS02"/>
 <xsl:value-of select="','"/>
         <xsl:value-of select="$payment/REF[REF01='6R']/REF02"/>
 <xsl:value-of select="','"/>


    <xsl:value-of select="$cas/CAS[CAS01='PR']/CAS02"/>
 <xsl:value-of select="','"/>
 <xsl:text>&#x0A;</xsl:text>  
  </xsl:template>
 </xsl:stylesheet>

------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
 <xsl:output method="text" indent="yes"/>

<xsl:template match="Interchange">
<xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop  
  [@LoopId='2100']/Loop[@LoopId='2110']"/>
 </xsl:template>


<xsl:template match="Loop[@LoopId='2110'] "> 
<xsl:variable name="trans" select="../../."/>
<xsl:variable name="payer" select="../../Loop[@LoopId='1000A']"/>
<xsl:variable name="payee" select="../../Loop[@LoopId='1000B']"/>
<xsl:variable name="payment" select="."/>
 <xsl:variable name="cas" select="../../Loop[@LoopId='2110']"/>
 <xsl:variable name="caxx" select="."/>

<xsl:value-of select="$trans/BPR/BPR16"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$caxx/N1/N102"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payee/N1/N102"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payee/N1/N104"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP01"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP02"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/CLP/CLP03"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/NM1[NM101='QC']/NM103"/>
<xsl:value-of select="','"/>
<xsl:value-of select="$payment/NM1[NM101='QC']/NM104"/>
<xsl:value-of select="','"/>

 <xsl:value-of select="$cas/DTM[DTM01='472']/DTM02"/>
<xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='CO']/CAS01"/>
 <xsl:value-of select="','"/>
  <xsl:value-of select="$payment/CAS[CAS01='CO']/CAS02"/>
 <xsl:value-of select="','"/>
      <xsl:value-of select="$payment/CAS[CAS01='CR']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='CR']/CAS02"/>
 <xsl:value-of select="','"/>
      <xsl:value-of select="$payment/CAS[CAS01='OA']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='OA']/CAS02"/>
 <xsl:value-of select="','"/>
         <xsl:value-of select="$payment/CAS[CAS01='PI']/CAS01"/>
 <xsl:value-of select="','"/>
  <xsl:value-of select="$payment/CAS[CAS01='PI']/CAS02"/>
 <xsl:value-of select="','"/>
<xsl:value-of select="$payment/CAS[CAS01='PR']/CAS01"/>
 <xsl:value-of select="','"/>
 <xsl:value-of select="$payment/CAS[CAS01='PR']/CAS02"/>
 <xsl:value-of select="','"/>
         <xsl:value-of select="$payment/REF[REF01='6R']/REF02"/>
 <xsl:value-of select=",'"/>


    <xsl:value-of select="$cas/CAS[CAS01='PR']/CAS02"/>
 <xsl:value-of select="','"/>
 <xsl:text>&#x0A;</xsl:text>
 </xsl:template>
 </xsl:stylesheet>

---------835文件

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*FUDD*ELMER*S***MI*1333333~
      NM1*82*2*WECOVERWY SVCS*****FI*346608640~
      REF*F8*A76B04054~
      SVC*HC:H0005:HF:H9*56.70*56.52**6~
        DTM*472*20040205~
        CAS*CO*42*0.18*0~
        REF*6R*444444~
    CLP*999999*4*25.95*0*25.95*13*0000000555555555*11~
      NM1*QC*1*SAM*YOSEMITE*A***MI*3333333~
      NM1*82*2*ACME AGENCY*****FI*310626223~
      REF*F8*H57B10401~
      SVC*ZZ:M2200:HE*25.95*0**1~
        DTM*472*20021224~
        CAS*CR*18*25.95*0~
        CAS*CO*42*0*0~
        REF*6R*999999~
    CLP*888888*4*162.13*0*162.13*MC*0000000456789123*11~
      NM1*QC*1*SQUAREPANTS*BOB* ***MI*2222222~
      NM1*82*2*BIKINI AGENCY*****FI*310626223~
      REF*F8*H57B10401~
      SVC*ZZ:M151000:F0*162.13*0**1.9~
        DTM*472*20020920~
        CAS*CO*29*162.13*0*42*0*0~
        REF*6R*888888~
    CLP*111111*2*56.52*18.88*0*13*0000000644444444*53~
      NM1*QC*1*LEGHORN*FOGHORN*P***MI*7777777~
      NM1*82*2*CHICKENHAWK SVCS*****FI*346608640~
      REF*F8*A76B04054~
      SVC*HC:H0005:HF:H9*56.52*18.88**6~
        DTM*472*20031209~
        CAS*CO*42*0*0~
        CAS*OA*23*37.64*0~
        REF*6R*111111~
    CLP*121212*4*56.52*0*0*13*0000000646464640*53~
      NM1*QC*1*EXPLORER*DORA****MI*1717171~
      NM1*82*2*SWIPER AGENCY*****FI*346608640~
      REF*F8*A76B04054~
      SVC*HC:H0005:HF:H9*56.52*0**6~
        DTM*472*20031202~
        CAS*CO*42*0*0~
        CAS*OA*23*57.6*0*23*-1.08*0~
        REF*6R*121212~
    CLP*333333*1*74.61*59.69*14.92*13*0000000688888888*55~
      NM1*QC*1*BEAR*YOGI* ***MI*2222222~
      NM1*82*2*JELLYSTONE SVCS*****FI*346608640~
      REF*F8*A76B04054~
      SVC*ZZ:A0230:HF*74.61*59.69**1~
        DTM*472*20040203~
        CAS*PR*2*14.92*0~
        CAS*CO*42*0*0~
        REF*6R*333333~
    CLP*777777*25*136.9*0*0*13*0000000622222222*53~
      NM1*QC*1*BIRD*TWEETY*M***MI*4444444~
      NM1*82*2*GRANNY AGENCY*****FI*340716747~
      REF*F8*A76B03293~
      SVC*HC:H0015:HF:99:H9*136.9*0**1~
        DTM*472*20030911~
        CAS*PI*104*136.72*0~
        CAS*CO*42*0.18*0~
        REF*6R*777777~
    CLP*123456*22*-42.58*-42.58*0*13*0000000657575757*11~
      NM1*QC*1*SIMPSON*HOMER* ***MI*8787888~
      NM1*82*2*DOH GROUP*****FI*310626223~
      REF*F8*A57B04033~
      SVC*HC:H0036:GT:UK*-42.58*-42.58**-2~
        DTM*472*20040102~
        CAS*CR*141*0*0*42*0*0*22*0*0~
        CAS*OA*141*0*0~
        REF*6R*123456~
    CLP*090909*22*-86.76*-86.76*0*MC*0000000648484848*53~
      NM1*QC*1*DUCK*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*97*07504123~
  GE*1*1~
IEA*1*004075123~

【问题讨论】:

  • 您的 XML 输入是什么样的?此外,“未能成功以 csv 格式返回所有字段” 不足以让任何人为您提供帮助。请详细描述问题。
  • 您的描述中缺少某些内容。您向我们展示的“835 文件”不是 XML,因此 XSLT 无法对其进行处理,因此您无法获得您声称的结果。
  • Edi 格式被提供给解析器,输出由 XLST 控制。我没有可用的实际 XML,但我可以(在某种程度上)通过修改 XSLT 来控制输出。我是新手,@Tim C 能够提供帮助。
  • 可以通过应用只包含身份转换模板的样式表来查看输入 XML 的样子。然后你会确切地知道你在处理什么,而不是在黑暗中摸索。

标签: loops xslt export-to-csv edi hipaa


【解决方案1】:

查看您的两个样式表,唯一的区别在于 xsl:apply-templates

<xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop 
                             [@LoopId='2100']"/>

和各自的模板匹配

<xsl:template match="Loop[@LoopId='2100'] ">

在这两种情况下,只有“2100”和“2110”不同。

要允许第一个 XSLT 管理“2100”和“2110”记录,请将现有的单个 xsl:apply-templates 替换为:

<xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop[@LoopId='2100']"/>
<xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop[@LoopId='2110']"/>

然后,把模板匹配改成这个,共享模板

<xsl:template match="Loop[@LoopId='2100' or @LoopId='2110'] ">

试试这个(删节的)XSLT,它将您的两个 XSLT 样式表合二为一

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="text" indent="yes"/>

<xsl:template match="Interchange">
    <xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop[@LoopId='2100']"/>
    <xsl:apply-templates select="FunctionGroup/Transaction/Loop[@LoopId='2000']/Loop[@LoopId='2110']"/>
</xsl:template>

<xsl:template match="Loop[@LoopId='2100' or @LoopId='2110'] "> 
    <xsl:variable name="trans" select="../../."/>
    <xsl:variable name="caxx" select="."/>
    <xsl:value-of select="$trans/BPR/BPR16"/>
    <xsl:value-of select="','"/>
    <xsl:value-of select="$caxx/N1/N102"/>
    <xsl:text>&#x0A;</xsl:text>  
</xsl:template>
</xsl:stylesheet>

【讨论】:

  • 我按照建议做了,但是将模板匹配更改为
  • 有没有办法在不指定字段的情况下以 csv 格式从两个循环中返回所有字段?类似于 SQL Select * from table 语句?
  • 我已经对我的答案进行了编辑,以显示一个完整的 XSLT 样式表来演示。您确实可以使其更通用,但是如果不查看您的输入 XML 或不知道您期望什么输出,就很难给出准确的答案。 (无论如何,您可能需要提出一个全新的问题)。
  • 谢谢@Tim C,我添加了 并且能够以 csv 格式从两个循环中获取字段,但在不同的行中
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 2014-07-20
相关资源
最近更新 更多