2013-04-05 2 views
2

나는 HAPI 라이브러리를 사용하여 생성 할 수있는 XML을 가지고 있으며 XSL을 사용하여 XML 형식을 변경할 수 있습니다. 다음 템플릿을 사용하고 있습니다. 현재 템플릿은 OBX.5 세그먼트에서 디지털 값을 확인한 다음 OBX6 (측정 단위)을 해석합니다. 그러나 그들은 또한 사이에 caret ^ (예 : %^% 또는 mL^mL)와 중복 스타일로 클라이언트 중 하나에서 오는 OBX6 해석하려고합니다. 내 현재 템플릿을 무시하지만 ^ 전후에 세그먼트 문자열의 값을 가져올 수 있기를 바랍니다.XML 로의 변환 및 HL7 세그먼트

<xsl:template match="hl7:OBX.6[matches(./../hl7:OBX.5, '^\d+(\.\d+)?$') and index-of($percentList, .) or index-of($mgdlList, .) or index-of($mlList, .) or index-of($mmList, .) or index-of($mgList, .))]"> 
    <result><xsl:value-of select="./../hl7:OBX.5" /></result> 
     <xsl:when test="index-of($percentList, .)"> 
      <units>%</units> 
     </xsl:when> 
... 
     <xsl:when test="index-of($mlList, .)"> 
      <units>ml</units> 
     </xsl:when> 

     <xsl:otherwise> 
      <units><xsl:value-of select="./hl7:CE.1" /></units> 
     </xsl:otherwise> 
... 

</xsl:template> 

결과는 사전에

   <OBX.5>38.0</OBX.5> 
       <OBX.6> 
        <CE.1>%^%</CE.1> 
       </OBX.6> 

에서

  <result>38.0</result> 
      <units>%</units> 

감사를 생산한다!

답변

4

사용 : 여기

tokenize(hl7:CE.1, '\^')[1] 

간단한 XSLT 2.0 - 대조 :이 변환은 다음과 같은 XML 문서에인가

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="OBX.6"> 
    <xsl:sequence select="tokenize(CE.1, '\^')[1]"/> 
</xsl:template> 

<xsl:template match="text()"/> 
</xsl:stylesheet> 

은 (로부터 유래 XML 조각 제공 및 올바른 형식으로 작성) :

,
<t> 
    <OBX.5>38.0</OBX.5> 
    <OBX.6> 
     <CE.1>%^%</CE.1> 
    </OBX.6> 
</t> 

가 원하는 정확한 결과를 생성한다 : 또한 HAPI 라인 종결 세그먼트 터미네이터 | 필드 터미네이터 ^하여 세그먼트 내에 구분하는 불통 할 수 있음을 발견

% 
+0

당신이 사방에 굵은 텍스트를 사용을 중지 것이다? 모든 자본으로 읽는 것은 거의 고통 스럽습니다. – Borodin

+1

@ 보 로딘, 도처에? –

0

. 이것은 대단히

해당 XSL의 모습 도움 :

<xsl:template match="hl7:OBX.6[matches(./../hl7:OBX.5, '^\d+(\.\d+)?$') ]"> 

    <xsl:if test="hl7:CE.1[ index-of($percentList, .) or index-of($mgdlList, .) or index-of($mlList, .) or index-of($mmList, .) or index-of($mgList, .))]"> 
     <result><xsl:value-of select="./../hl7:OBX.5" /></result> 

     <xsl:choose> 
      <xsl:when test="index-of($percentList, hl7:CE.1)"> 
       <units>%</units> 
      </xsl:when> 
... 

      <xsl:when test="index-of($mlList, hl7:CE.1)"> 
       <units>mL</units> 
      </xsl:when> 
... 

      <xsl:otherwise> 
       <units><xsl:value-of select="hl7:CE.1" /></units> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:if> 
</xsl:template>