2013-04-05 158 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>