2012-10-15 2 views
1

XML 요소를 결합하는 데 문제가 있습니다. 다음 XML은 중복 값 (T804)을 가지고 있는데, XSLT를 사용하여 레코드를 하나의 T804 레코드로 결합하는 방법은 무엇입니까?XSLT를 사용하여 XML 요소를 동일한 ID와 결합하는 방법

전 :

<OBR> 
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id> 
<OBX> 
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No></OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> 
</OBX> 
<OBX> 
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> 
</OBX> 
<OBX> 
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx> 
</OBX> 
<OBX> 
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx> 
</OBX> 
</ORB> 

후 - 하나에 두 개의 T084 기록을 결합.

<OBR> 
<OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id> 
<OBX> 
<OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> 
<OBX> 
<OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx> 
</OBX> 
<OBX> 
<OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd> 
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
<OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
<OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
<OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx> 
</OBX> 
</ORB> 
+0

무엇을 시도해 봤습니까? – Deepak

답변

2

이 변환 : 제공된 XML 문서 적용

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kOrderByCd" match="OBX" 
    use="OBX_3_Ltt_Cd"/> 

<xsl:template match="node()|@*" name="identity"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
    "OBX[generate-id() 
     = 
     generate-id(key('kOrderByCd', OBX_3_Ltt_Cd)[1]) 
     and 
     key('kOrderByCd', OBX_3_Ltt_Cd)[2] 
     ]"> 
    <OBX> 
    <xsl:apply-templates mode="inGroup"/> 
    </OBX> 
</xsl:template> 

    <xsl:template match= 
    "OBX[not(generate-id() 
      = 
      generate-id(key('kOrderByCd', OBX_3_Ltt_Cd)[1]) 
      ) 
     ]"/> 

<xsl:template match="OBX/*" mode="inGroup"> 
    <xsl:variable name="vNonEmpty" select= 
    "key('kOrderByCd', ../OBX_3_Ltt_Cd) 
      /*[name() = name(current()) 
      and 
       text() 
       ]"/> 
    <xsl:apply-templates select= 
    "$vNonEmpty[1]| self::*[not($vNonEmpty)]"/> 
</xsl:template> 
</xsl:stylesheet> 

:

,617,451 :

<OBR> 
    <OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id> 
    <OBX> 
     <OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> 
     <OBX_5_1_Lbr_No></OBX_5_1_Lbr_No> 
     <OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx> 
     <OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx> 
     <OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> 
    </OBX> 
    <OBX> 
     <OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> 
     <OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No> 
     <OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
     <OBX_6_Lbr_Unt_Tx></OBX_6_Lbr_Unt_Tx> 
     <OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> 
    </OBX> 
    <OBX> 
     <OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd> 
     <OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
     <OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
     <OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
     <OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx> 
    </OBX> 
    <OBX> 
     <OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd> 
     <OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> 
     <OBX_5_2_Lbr_Tx></OBX_5_2_Lbr_Tx> 
     <OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> 
     <OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx> 
    </OBX> 
</OBR> 

는 원하는 정확한 결과를 생성

<OBR> <OBR_31_Lab_Ins_Typ_Id>IL</OBR_31_Lab_Ins_Typ_Id> <OBX> <OBX_3_Ltt_Cd>T084</OBX_3_Ltt_Cd> <OBX_5_1_Lbr_No>1.038</OBX_5_1_Lbr_No> <OBX_5_2_Lbr_Tx>HIGH</OBX_5_2_Lbr_Tx> <OBX_6_Lbr_Unt_Tx/> <OBX_7_Lbr_Rng_Tx>1.003-1.035</OBX_7_Lbr_Rng_Tx> </OBX> <OBX> <OBX_3_Ltt_Cd>T086</OBX_3_Ltt_Cd> <OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> <OBX_5_2_Lbr_Tx/> <OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> <OBX_7_Lbr_Rng_Tx>0-9</OBX_7_Lbr_Rng_Tx> </OBX> <OBX> <OBX_3_Ltt_Cd>T087</OBX_3_Ltt_Cd> <OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No> <OBX_5_2_Lbr_Tx/> <OBX_6_Lbr_Unt_Tx>HPF</OBX_6_Lbr_Unt_Tx> <OBX_7_Lbr_Rng_Tx>0-4</OBX_7_Lbr_Rng_Tx> </OBX> </OBR> 

설명 :

  1. Muenchian 그룹.

  2. 신원 규칙을 사용하고 재정의하십시오.

  3. 키 사용.

관련 문제