2017-10-31 24 views
1

가 나는나는 기록을 형제의 무리가있는 XML 문서를 가지고 내가

내 XML이 나는 경우 형제의 값을 얻기 위해 노력하고 있어요 :

<Transaction> 
    <Record Name = "SENDER" RecNum = "1"> 
     <Segment_Tag>SENDER</Segment_Tag> 
     <SENDER01>5499953664103</SENDER01> 
     <SENDER02>UTILMD</SENDER02> 
    </Record> 
    <Record Name = "BGM" RecNum = "2"> 
     <Segment_Tag>BGM</Segment_Tag> 
     <BGM01>E44</BGM01> 
     <BGM03>260</BGM03> 
     <BGM05>SIS20170802181883607</BGM05> 
     <BGM06>9</BGM06> 
     <BGM07>NA</BGM07> 
    </Record> 
    <Record Name = "DTM" RecNum = "3"> 
     <Segment_Tag>DTM</Segment_Tag> 
     <DTM01>137</DTM01> 
     <DTM02>201708021227</DTM02> 
     <DTM03>203</DTM03> 
    </Record> 
    <Record Name = "DTM" RecNum = "4"> 
     <Segment_Tag>DTM</Segment_Tag> 
     <DTM01>735</DTM01> 
     <DTM02>+0100</DTM02> 
     <DTM03>406</DTM03> 
    </Record> 
    <Record Name = "MKS" RecNum = "5"> 
     <Segment_Tag>MKS</Segment_Tag> 
     <MKS01>23</MKS01> 
    </Record> 
    <Record Name = "NAD" RecNum = "6"> 
     <Segment_Tag>NAD</Segment_Tag> 
     <NAD01>MR</NAD01> 
     <NAD02>5499953664103</NAD02> 
     <NAD04>9</NAD04> 
    </Record> 
    <Record Name = "NAD" RecNum = "7"> 
     <Segment_Tag>NAD</Segment_Tag> 
     <NAD01>MS</NAD01> 
     <NAD02>5414490000504</NAD02> 
     <NAD04>9</NAD04> 
    </Record> 
    <Record Name = "IDE" RecNum = "8"> 
     <Segment_Tag>IDE</Segment_Tag> 
     <IDE01>24</IDE01> 
     <IDE02>SIS20170802181883607</IDE02> 
     <Record Name = "IDEDTM" RecNum = "9"> 
      <Segment_Tag>IDEDTM</Segment_Tag> 
      <DTM201>97</DTM201> 
      <DTM202>201708</DTM202> 
      <DTM203>203</DTM203> 
     </Record> 
     <Record Name = "STS" RecNum = "10"> 
      <Segment_Tag>STS</Segment_Tag> 
      <STS01>7</STS01> 
      <STS02>64</STS02> 
      <STS05>BA5</STS05> 
      <STS06>BEL</STS06> 
      <STS07>260</STS07> 
     </Record> 
     <Record Name = "LOC" RecNum = "11"> 
      <Segment_Tag>LOC</Segment_Tag> 
      <LOC01>172</LOC01> 
      <LOC02>541449020703505315</LOC02> 
      <LOC04>9</LOC04> 
     </Record> 
     <Record Name = "IDERFF" RecNum = "12"> 
      <Segment_Tag>IDERFF</Segment_Tag> 
      <RFF01>TN</RFF01> 
      <RFF02>281945</RFF02> 
     </Record> 
     <Record Name = "IDENAD" RecNum = "13"> 
      <Segment_Tag>IDENAD</Segment_Tag> 
      <NAD101>DDQ</NAD101> 
      <NAD102>5425037700016</NAD102> 
      <NAD104>9</NAD104> 
     </Record> 
    </Record> 
    <Record Name = "BGM" RecNum = "14"> 
     <Segment_Tag>BGM</Segment_Tag> 
     <BGM01>414</BGM01> 
     <BGM05>ARI20170802225703376</BGM05> 
     <BGM06>9</BGM06> 
     <BGM07>NA</BGM07> 
    </Record> 
    <Record Name = "DTM" RecNum = "15"> 
     <Segment_Tag>DTM</Segment_Tag> 
     <DTM01>137</DTM01> 
     <DTM02>201708021228</DTM02> 
     <DTM03>203</DTM03> 
    </Record> 
    <Record Name = "DTM" RecNum = "16"> 
     <Segment_Tag>DTM</Segment_Tag> 
     <DTM01>735</DTM01> 
     <DTM02>+0100</DTM02> 
     <DTM03>406</DTM03> 
    </Record> 
    <Record Name = "MKS" RecNum = "17"> 
     <Segment_Tag>MKS</Segment_Tag> 
     <MKS01>23</MKS01> 
    </Record> 
    <Record Name = "NAD" RecNum = "18"> 
     <Segment_Tag>NAD</Segment_Tag> 
     <NAD01>MR</NAD01> 
     <NAD02>5499953664103</NAD02> 
     <NAD04>9</NAD04> 
    </Record> 
    <Record Name = "NAD" RecNum = "19"> 
     <Segment_Tag>NAD</Segment_Tag> 
     <NAD01>MS</NAD01> 
     <NAD02>5414490000504</NAD02> 
     <NAD04>9</NAD04> 
    </Record> 
    <Record Name = "IDE" RecNum = "20"> 
     <Segment_Tag>IDE</Segment_Tag> 
     <IDE01>24</IDE01> 
     <IDE02>ARI20170802225703376</IDE02> 
     <Record Name = "IDEDTM" RecNum = "21"> 
      <Segment_Tag>IDEDTM</Segment_Tag> 
      <DTM201>92</DTM201> 
      <DTM202>201707142300</DTM202> 
      <DTM203>203</DTM203> 
     </Record> 
     <Record Name = "STS" RecNum = "22"> 
      <Segment_Tag>STS</Segment_Tag> 
      <STS01>E01</STS01> 
      <STS03>260</STS03> 
      <STS04>39</STS04> 
      <STS05>E35</STS05> 
      <STS07>260</STS07> 
     </Record> 
     <Record Name = "LOC" RecNum = "23"> 
      <Segment_Tag>LOC</Segment_Tag> 
      <LOC01>172</LOC01> 
      <LOC02>541449060016130774</LOC02> 
      <LOC04>9</LOC04> 
     </Record> 
     <Record Name = "IDERFF" RecNum = "24"> 
      <Segment_Tag>IDERFF</Segment_Tag> 
      <RFF01>TN</RFF01> 
      <RFF02>172140000045770</RFF02> 
     </Record> 
     <Record Name = "IDECCI" RecNum = "25"> 
      <Segment_Tag>IDECCI</Segment_Tag> 
      <CCI02>E14</CCI02> 
      <CCI04>260</CCI04> 
      <Record Name = "IDECAV" RecNum = "26"> 
       <Segment_Tag>IDECAV</Segment_Tag> 
       <CAV01>B18</CAV01> 
       <CAV02>BEL</CAV02> 
       <CAV03>260</CAV03> 
      </Record> 
     </Record> 
     <Record Name = "IDENAD" RecNum = "27"> 
      <Segment_Tag>IDENAD</Segment_Tag> 
      <NAD101>IT</NAD101> 
      <NAD111>RUE JOSEPH DECOOMAN</NAD111> 
      <NAD112>89 221</NAD112> 
      <NAD115>GREZ-DOICEAU</NAD115> 
      <NAD116>1390</NAD116> 
      <NAD117>BE</NAD117> 
     </Record> 
    </Record> 
</Transaction> 

내 코드 :

<xsl:for-each select="Transaction/Record[@Name='IDE']" > 
    <xsl:choose> 
     <xsl:when test="../Record[@Name='BGM']/BGM01.='414'"> 
       <xsl:call-template name="ChangeResponse"/> 
     </xsl:when> 
     <xsl:when test="../Record[@Name='BGM']/BGM01.='406'"> 
       <xsl:call-template name="DropRequest"/> 
     </xsl:when> 
    </xsl:choose> 
</xsl:for-each> 

문제는 BGM과 IDE가 형제이며 IDE가 현재 노드 일 때 BGM 레코드에 도달하기 위해 상위 노드로 이동해야하며 이로 인해 첫 번째 B GM 값만 반환됩니다. IDE 값 바로 앞에있는 BGM 값을 얻는 방법을 찾으려고합니다. 이전 형제를 사용하여 시도했지만 그 전에 선행 IDE 값을 다음 BGM 값을 찾습니다. 각 IDE의 현재 노드 내에 머물면서 이전 BGM의 값을 평가해야하지만 BGM은 IDE의 형제이므로 IDE에서 시작할 때 Bpathm을 얻기 위해 xpath를 사용하는 방법을 잘 모르겠습니다.

답변

1

xsl:for-each select="Transaction/Record[@Name='IDE']" 안에 preceding-sibling::Record[@Name = 'BGM'][1]을 사용하면 현재 부터 시작하는 형제 중 첫 번째를 찾을 수 있습니다. 따라서 Record Name = "IDE" RecNum = "8"에 대한 샘플에서는 Record Name = "BGM" RecNum = "2"을 선택합니다.

+0

처음에는 BGM 뒤에 [1]을 사용하지 않았고 작동하지 않지만 [1]이 (가)있는 다른 게시물을 발견했습니다. –