|
Subject: Sorting attributes with XSL - Is there a way to "grep" and match on partial attribute string value? From: XSL Mailing List <xsl@xxxxxxxxxxxxxxxxxxx> Date: 22 Sep 1999 15:21:20 -0700 |
I want to match attribute string value for HL71A/MSH/PID/@Name NOT as exact match as follows:
<xsl:apply-templates select="HL7A1/MSH/PID[@Name = 'Donneley^Floyd']" order-by = "+@Name" />
Instead, what I want to do is sort @Name and match for all @Name attribute values where @Name starts with D or d (or any other letter) and would retrieve all attribute values which start with D or and then populate the table.
Any suggestions?? HELP!!
I have the following XML file: (XSL file below the XML)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="19990917_Batch_File_XML_HL7_mod_20_Donneley^Floyd.xsl"?>
<HL7A1>
<MSH Origin='labtstn' Dest='cabtstn' TStamp='93000000' Type='ORU'
Id='57922001'>
<PID Id='22392248' ExtId='111222333' Name='Smith^Jane'
DOB='19170615' Sex='F'>
<OBR Id='22392248' PlacerId='222333444-1' TStamps='9300001'>
<USID Id='7010'>COMPLETE BLOOD COUNT</USID>
<OBX TStamp='9300001'>
<USID Id='5101'>REMARKS</USID>
<OBX-VAL>DNR</OBX-VAL>
</OBX>
<OBX TStamp='9300001'>
<USID Id='5147'>MEAN PLATELET VOLUME</USID>
<OBX-VAL Units='fL'>9.3</OBX-VAL>
</OBX>
</OBR>
<OBR Id='22392248' PlacerId='222333444-2' TStamps='9300001'>
<USID Id='7069'>GENERAL SURVEY PROFILE</USID>
<OBX TStamp='9300001'>
<USID Id='1104'>GLUCOSE</USID>
<OBX-VAL Units='mG/dL' RefRange='7-22'>77</OBX-VAL>
<OBX-NOTE>GLUCOSE TEST
</OBX-NOTE>
</OBX>
<OBX TStamp='9300001'>
<USID Id='1137'>CALCIUM</USID>
<OBX-VAL Units='mG/dL' RefRange='2.5-4.5'>9.4</OBX-VAL>
<OBX-NOTE>Please note change in reference range effective 05/04/1998.
</OBX-NOTE>
</OBX>
</OBR>
</PID>
<MSH-RAW><![CDATA[
MSH|^`\&||labtstn||cabtstn|199908020046||ORU|57922001|D|2.2
PID|1|111222333|22392248||Smith^Jane||19170615|M
OBR|1|222333444-1|22392248|7010^COMPLETE BLOOD COUNT^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|5101^REMARKS^LOCAL||DNR||||||F|||199908020046
OBX|2|ST|5147^MEAN PLATELET VOLUME^LOCAL||9.3|fL|||||F|||199908020046
OBR|2|222333444-2|22392248|7069^GENERAL SURVEY PROFILE^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|1104^GLUCOSE^LOCAL||77|mG/dL|7-22||||F|||199908020046
OBX|2|ST|1137^CALCIUM^LOCAL||9.4|mG/dL|2.5-4.5||||F|||199908020046
NTE|1|| Please note change in reference range effective 05/04/1998.
NTE|2||
]]>
</MSH-RAW>
</MSH>
<MSH Origin='labtstn' Dest='cabtstn' TStamp='93000000' Type='ORU'
Id='57922002'>
<PID Id='11248756' ExtId='444555666' Name='Johnson^Susan'
DOB='19580407' Sex='F'>
<OBR Id='11248756' PlacerId='222333555-1' TStamps='9300001'>
<USID Id='2505'>THYROXINE, TOTAL (T4)</USID>
<USID Coding='LOINC' Id='3062-2'></USID>
<OBX TStamp='9300001'>
<USID Id='2505'>THYROXINE, TOTAL (T4)</USID>
<OBX-VAL Units='uG/dL' RefRange='27-40'>9.9</OBX-VAL>
</OBX>
</OBR>
<OBR Id='11248756' PlacerId='222333555-2' TStamps='9300001'>
<USID Id='2511'>T3 UPTAKE (T3U)</USID>
<USID Coding='LOINC' Id='3050-2'></USID>
<OBX TStamp='9300001'>
<USID Id='2511'>T3 UPTAKE (T3U)</USID>
<OBX-VAL Units='%' RefRange='27-40'>37</OBX-VAL>
</OBX>
</OBR>
</PID>
<MSH-RAW><![CDATA[
MSH|^`\&||labtstn||cabtstn1|199908020046||ORU|57922001|D|2.2
PID|2|444555666|11248756||Johnson^Susan||19580407|F
OBR|1|222333555-1|11248756|2505^THYROXINE, TOTAL (T4)^LOCAL^3062-2^^LOINC|||19950511|||||||199505112034||1728||
OBX|1|ST|2505^THYROXINE, TOTAL (T4)^LOCAL||9.9|uG/dL|27-40||||F|||199908020046
OBR|2|222333555-2|11248756|2511^T3 UPTAKE (T3U)^LOCAL^3050-2^^LOINC|||19950511|||||||199505112034||1728||
OBX|1|ST|2511^T3 UPTAKE (T3U)^LOCAL||37|%|27-40||||F|||199908020046
]]>
</MSH-RAW>
</MSH>
<MSH Origin='labtstn' Dest='cabtstn' TStamp='93000000' Type='ORU'
Id='57922001'>
<PID Id='22392248' ExtId='111222333' Name='James^Robert'
DOB='19530615' Sex='M'>
<OBR Id='11248756' PlacerId='222333555-1' TStamps='9300001'>
<USID Id='2505'>THYROXINE, TOTAL (T4)</USID>
<USID Coding='LOINC' Id='3062-2'></USID>
<OBX TStamp='9300001'>
<USID Id='2505'>THYROXINE, TOTAL (T4)</USID>
<OBX-VAL Units='uG/dL' RefRange='27-40'>9.9</OBX-VAL>
</OBX>
</OBR>
<OBR Id='11248756' PlacerId='222333555-2' TStamps='9300001'>
<USID Id='2511'>T3 UPTAKE (T3U)</USID>
<USID Coding='LOINC' Id='3050-2'></USID>
<OBX TStamp='9300001'>
<USID Id='2511'>T3 UPTAKE (T3U)</USID>
<OBX-VAL Units='%' RefRange='27-40'>37</OBX-VAL>
</OBX>
</OBR>
<OBR Id='22392248' PlacerId='222333444-1' TStamps='9300001'>
<USID Id='7010'>COMPLETE BLOOD COUNT</USID>
<OBX TStamp='9300001'>
<USID Id='5101'>REMARKS</USID>
<OBX-VAL>DNR</OBX-VAL>
</OBX>
<OBX TStamp='9300001'>
<USID Id='5147'>MEAN PLATELET VOLUME</USID>
<OBX-VAL Units='fL'>9.3</OBX-VAL>
</OBX>
</OBR>
<OBR Id='22392248' PlacerId='222333444-2' TStamps='9300001'>
<USID Id='7069'>GENERAL SURVEY PROFILE</USID>
<OBX TStamp='9300001'>
<USID Id='1104'>GLUCOSE</USID>
<OBX-VAL Units='mG/dL' RefRange='7-22'>77</OBX-VAL>
<OBX-NOTE>GLUCOSE TEST
</OBX-NOTE>
</OBX>
<OBX TStamp='9300001'>
<USID Id='1137'>CALCIUM</USID>
<OBX-VAL Units='mG/dL' RefRange='2.5-4.5'>9.4</OBX-VAL>
<OBX-NOTE>Please note change in reference range effective 05/04/1998.
</OBX-NOTE>
</OBX>
</OBR>
</PID>
<MSH-RAW><![CDATA[
MSH|^`\&||labtstn||cabtstn|199908020046||ORU|57922001|D|2.2
PID|1|111222333|22392248||Smith^Jane||19170615|M
OBR|1|222333444-1|22392248|7010^COMPLETE BLOOD COUNT^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|5101^REMARKS^LOCAL||DNR||||||F|||199908020046
OBX|2|ST|5147^MEAN PLATELET VOLUME^LOCAL||9.3|fL|||||F|||199908020046
OBR|2|222333444-2|22392248|7069^GENERAL SURVEY PROFILE^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|1104^GLUCOSE^LOCAL||77|mG/dL|7-22||||F|||199908020046
OBX|2|ST|1137^CALCIUM^LOCAL||9.4|mG/dL|2.5-4.5||||F|||199908020046
NTE|1|| Please note change in reference range effective 05/04/1998.
NTE|2||
]]>
</MSH-RAW>
</MSH>
<MSH Origin='labtstn' Dest='cabtstn' TStamp='93000000' Type='ORU'
Id='57922001'>
<PID Id='22392248' ExtId='111222333' Name='Donneley^Floyd'
DOB='19620705' Sex='M'>
<OBR Id='22392248' PlacerId='222333444-1' TStamps='9300001'>
<USID Id='7010'>COMPLETE BLOOD COUNT</USID>
<OBX TStamp='9300001'>
<USID Id='5101'>REMARKS</USID>
<OBX-VAL>DNR</OBX-VAL>
</OBX>
<OBX TStamp='9300001'>
<USID Id='5147'>MEAN PLATELET VOLUME</USID>
<OBX-VAL Units='fL'>9.3</OBX-VAL>
</OBX>
</OBR>
<OBR Id='22392248' PlacerId='222333444-2' TStamps='9300001'>
<USID Id='7069'>GENERAL SURVEY PROFILE</USID>
<OBX TStamp='9300001'>
<USID Id='1104'>GLUCOSE</USID>
<OBX-VAL Units='mG/dL' RefRange='7-22'>77</OBX-VAL>
<OBX-NOTE>GLUCOSE TEST
</OBX-NOTE>
</OBX>
<OBX TStamp='9300001'>
<USID Id='1137'>CALCIUM</USID>
<OBX-VAL Units='mG/dL' RefRange='2.5-4.5'>9.4</OBX-VAL>
<OBX-NOTE>Please note change in reference range effective 05/04/1998.
</OBX-NOTE>
</OBX>
</OBR>
</PID>
<MSH-RAW><![CDATA[
MSH|^`\&||labtstn||cabtstn|199908020046||ORU|57922001|D|2.2
PID|1|111222333|22392248||Smith^Jane||19170615|M
OBR|1|222333444-1|22392248|7010^COMPLETE BLOOD COUNT^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|5101^REMARKS^LOCAL||DNR||||||F|||199908020046
OBX|2|ST|5147^MEAN PLATELET VOLUME^LOCAL||9.3|fL|||||F|||199908020046
OBR|2|222333444-2|22392248|7069^GENERAL SURVEY PROFILE^LOCAL|||19980529|||||||199805292311||1352||
OBX|1|ST|1104^GLUCOSE^LOCAL||77|mG/dL|7-22||||F|||199908020046
OBX|2|ST|1137^CALCIUM^LOCAL||9.4|mG/dL|2.5-4.5||||F|||199908020046
NTE|1|| Please note change in reference range effective 05/04/1998.
NTE|2||
]]>
</MSH-RAW>
</MSH>
XSL FILE:
19990917_Batch_File_XML_HL7_mod_20_Donneley^Floyd.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<!--this template is applied to the root element-->
<HTML>
<HEAD>
<TITLE>
<xsl:value-of select="HL7A1/MSH"/>
</TITLE>
</HEAD>
<BODY>
<xsl:apply-templates select="HL7A1/MSH/PID[@Name = 'Donneley^Floyd']" order-by = "+@Name" />
<!--insert the results of another template identified by the value of
the "select" attribute-->
</BODY>
</HTML>
</xsl:template>
<!--closes out main template-->
<!--This template creates a table and begins populating it -->
<xsl:template match="HL7A1/MSH/PID">
<TABLE width="100%" border="1" bgcolor="blue">
<TR bgcolor="green" width="100%" valign="top">
<TD width="16%" valign="top">
NAME:
<BR></BR>
<xsl:value-of select="@Name"/>
</TD>
<TD width="16%" valign="top">
<FONT color="black">
DOB:
<BR></BR>
<xsl:value-of select="@DOB"/>
</FONT>
</TD>
<TD width="16%" valign="top">
<FONT color="black">
SEX:
<BR></BR>
<xsl:value-of select="@Sex"/>
</FONT>
</TD>
<TD width="16%" valign="top">
<FONT color="black">
External ID:
<BR></BR>
<xsl:value-of select="@ExtId"/>
</FONT>
</TD>
<TD width="16%" valign="top">
<FONT color="black">
ID:
<BR></BR>
<xsl:value-of select="@Id"/>
</FONT>
</TD>
<TD width="16%" valign="top">
</TD>
</TR>
<xsl:apply-templates select="OBR"/>
<!--insert the results of another template identified by the value of
the "select" attribute-->
</TABLE>
</xsl:template>
<xsl:template match="HL7A1/MSH/PID/OBR">
<TR bgcolor="yellow" valign="top">
<TD width="16%" valign="top">
<FONT color="black">
ORDER: <BR></BR><xsl:value-of select="USID"/>
</FONT>
</TD>
<TD width="16%" valign="top">
<FONT size="-1" color="black">Orgin: </FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="../../@Origin"/></FONT>
</TD>
<TD width="16%" valign="top">
<FONT size="-1" color="black">Destination: </FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="../../@Dest"/></FONT>
</TD>
<TD width="16%" valign="top">
<FONT size="-1" color="black">Identification: </FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="../../@Id"/></FONT>
</TD>
<TD width="16%" valign="top">
<FONT size="-1" color="black">Time Stamp: </FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="../../@TStamp"/></FONT>
</TD>
<TD width="16%" valign="top">
<FONT size="-1" color="black">Message Type: </FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="../../@Type"/></FONT>
</TD>
</TR>
<xsl:apply-templates select="OBX"/>
<!--insert the results of another template identified by the value of
the "select" attribute-->
</xsl:template>
<xsl:template match="HL7A1/MSH/PID/OBR/OBX">
<TR bgcolor="white">
<TD width="16%" align="left">
<FONT size="-1" color="black">TIME STAMP:</FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="@TStamp"/></FONT>
</TD>
<TD width="16%" align="left">
<FONT size="-1" color="black">TEST:</FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="USID"/></FONT>
</TD>
<TD width="16%" align="left">
<FONT size="-1" color="black">RESULT:</FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="OBX-VAL"/></FONT>
</TD>
<TD width="16%" align="left">
<FONT size="-1" color="black">UNITS:</FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="OBX-VAL/@Units"/></FONT>
</TD>
<TD width="16%" align="left">
<FONT size="-1" color="black">NORMAL RANGE:</FONT>
<BR></BR>
<FONT size="-5" color="black"><xsl:value-of select="OBX-VAL/@RefRange"/></FONT>
</TD>
<xsl:apply-templates select="OBX-NOTE"/>
<!--insert the results of another template identified by the value of
the "select" attribute-->
</TR>
</xsl:template>
<xsl:template match="HL7A1/MSH/PID/OBR/OBX/OBX-NOTE">
<TD width="16%" bgcolor="red" valign="top">
<FONT size="-1" color="black">NOTES: <BR></BR></FONT>
<FONT size="-5" color="black"><xsl:value-of select="../OBX-NOTE"/></FONT>
</TD>
</xsl:template>
<!-- close the template that creates the table -->
<!-- once this template has run it's course, our table is completely
populated -->
<xsl:template match="text()|@*"><xsl:value-of select="."/></xsl:template>
<xsl:template match="text()"><xsl:value-of select="."/></xsl:template>
</xsl:stylesheet>
------- End of forwarded message -------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: attributes ordering, Samuel Yang | Thread | How Can You Exit an xsl:for-each Lo, Michael Teigman |
| Re: attributes ordering, Steve Schafer | Date | RE: attributes ordering, Samuel Yang |
| Month |