Преобразование и сегмент HL7 в XML

у меня есть XML, который мы смогли сгенерировать с помощью библиотек HAPI и использовать XSL для изменения формата XML. Я использую следующий шаблон. Текущий шаблон ищет цифровое значение в сегменте OBX.5, а затем интерпретирует OBX6 (единицы измерения). Однако я также пытаюсь интерпретировать OBX6, когда они поступают от одного из клиентов в стиле как дубликаты с символом вставки ^ между ними (например: %^% или mL^mL). Мой текущий шаблон игнорирует это, но я хотел бы получить значение подстроки сегмента до или после ^.

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

Заранее спасибо!


person iowatiger08    schedule 05.04.2013    source источник


Ответы (2)


Использование:

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>

получен желаемый правильный результат:

%
person Dimitre Novatchev    schedule 06.04.2013
comment
Пожалуйста, не могли бы вы прекратить везде использовать жирный шрифт? Это почти так же больно читать, как и заглавные буквы. - person Borodin; 06.04.2013

Я также обнаружил, что 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>
person iowatiger08    schedule 08.04.2013