2013-04-05 65 views
2

我有一個XML,我們可以使用HAPI庫生成並使用XSL來更改XML的格式。我正在使用以下模板。當前模板查看OBX.5段的數字值,然後解釋OBX6(度量單位)。但是,我試圖解釋OBX6時,他們來自一個風格的客戶之一與插入符號^之間(如:%^%mL^mL)重複。我當前的模板忽略了這一點,但我希望能夠得到^之前或之後的段子串的值。轉換和HL7段到XML

<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> 

結果應該產生

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

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

提前感謝!

回答

4

使用

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

下面是一個簡單XSLT 2.0 - 基於驗證:

<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文檔施加(從派生提供的XML片段並製作完好):

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

的想要的,正確的結果產生:

% 
+0

請將您停止使用粗體文字隨處可見?閱讀全部資本幾乎同樣痛苦。 – Borodin 2013-04-06 02:26:21

+1

@Borodin,到處都是? – 2013-04-06 02:34:37

0

我還發現,HAPI可以調整到由線路終端器,用於|段終止子和用於^字段終止段內界定。這極大地

相應的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>