Я искал все, что мог придумать, но не смог. Я явно новичок в xslt, поэтому, пожалуйста, будьте добры.
Во-первых, я боюсь, что не совсем понимаю, как работает <template>
. Я видел на примере других, где объявлено несколько <template>
. Однако, когда я делаю это, единственное, что отображается на выходе html, это последнее. Может быть, кто-то может помочь мне понять, как это работает. Я пролистал десятки ссылок и еще не понял этого. Ссылки на конкретные c учебные материалы и курсы приветствуются.
Во-вторых, вот проблема, с которой я работаю. Я думаю проблема связана с тем фактом, что for-each
уменьшает контекст для value-of
, и что я пытаюсь втянуть в третий value-of
, находится вне этого контекста?
Вот урезанная версия xml Я применяю эту таблицу стилей к:
<?xml version="1.0" encoding="UTF-8"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<component typeCode="COMP">
<structuredBody classCode="DOCBODY" moodCode="EVN">
<component typeCode="COMP" contextConductionInd="true">
<section>
<templateId root="2.16.840.1.113883.10.20.22.2.5" />
<code code="11450-43" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="PROBLEM LIST" />
<title>Problems</title>
<entry typeCode="DRIV" contextConductionInd="true">
<act xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" classCode="ACT" moodCode="EVN">
<entryRelationship typeCode="SUBJ" inversionInd="false">
<observation classCode="OBS" moodCode="EVN">
<value xsi:type="CD" code="73211009" displayName="Chronic kidney disease, unspecified" codeSystem="2.16.840.1.113883.6.96" codeSystemName="ICD-9-CM">
<originalText>
<reference value="#PROBKIND_0" />
</originalText>
</value>
</observation>
</entryRelationship>
</act>
</entry>
<entry typeCode="DRIV" contextConductionInd="true">
<act xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" classCode="ACT" moodCode="EVN">
<entryRelationship typeCode="SUBJ" inversionInd="false">
<observation classCode="OBS" moodCode="EVN">
<value xsi:type="CD" code="196001008" displayName="Chronic obstructive pulmonary disease with acute lower respiratory infection" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED CT">
<originalText>
<reference value="#PROBKIND_1" />
</originalText>
</value>
</observation>
</entryRelationship>
</act>
</entry>
</section>
</component>
</structuredBody>
</component>
</ClinicalDocument>
Вот что у меня есть в XSL-файле:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cda="urn:hl7-org:v3" xmlns:lookup="lookup" >
<xsl:output method="html"/>
<xsl:variable name="problemEntries" select="if (count(//cda:component/cda:section[cda:templateId/@root='2.16.840.1.113883.10.20.22.2.5.1']) > 0) then
//cda:component/cda:section[cda:templateId/@root='2.16.840.1.113883.10.20.22.2.5.1'] else
//cda:component/cda:section[cda:templateId/@root='2.16.840.1.113883.10.20.22.2.5']"/>
<lookup:oids>
<row oid='2.16.840.1.113883.6.1' oidName='LOINC'/>
<row oid='2.16.840.1.113883.6.103' oidName='ICD9CM'/>
<row oid='2.16.840.1.113883.6.104' oidName='ICD9CM'/>
<row oid='2.16.840.1.113883.6.12' oidName='CPT'/>
<row oid='2.16.840.1.113883.6.4' oidName='ICD10PCS'/>
<row oid='2.16.840.1.113883.6.88' oidName='RXNORM'/>
<row oid='2.16.840.1.113883.6.90' oidName='ICD10CM'/>
<row oid='2.16.840.1.113883.6.96' oidName='SNOMEDCT'/>
</lookup:oids>
<xsl:template match="/">
<html>
<body>
<b>TEST Canonical Codes:</b>
<table border="1">
<tr>
<th>OID</th>
<th>System Name</th>
<th>Canonical System Name</th>
</tr>
<xsl:for-each select="distinct-entries($problemEntries/cda:entry/cda:act/cda:entryRelationship/cda:observation/cda:value)">
<tr>
<td>
<xsl:value-of select="@codeSystem" /> <!-- to return the unique codeSystem (oid) values in the xml being evaluated -->
</td>
<td>
<xsl:value-of select="@codeSystemName" /> <!-- to return the unique codeSystemName values the document has for that oid (oidName) -->
</td>
<td>
<xsl:value-of select="//document('')/lookup:oids/row[@oid = @codeSystem]/@oidName" /> <!-- to look up the unique code (oid) from above and lookup what the conanical name is (oidName) -->
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</template>
</xsl:stylesheet>
Я положил комментарии рядом с каждым из value-of
, чтобы указать, что я пытаюсь сделать. В основном вот что я хочу сделать:
- Получить уникальный список всех комбинаций codeSystem / codeSystemName из всех записей
- для каждого из уникальных значений codeSystem. поиск в таблице для получения правильного oidName и отображения в соответствующей строке.
Вот мой ожидаемый результат в таблице HTML: HTML таблица вывода