Sorting attributes with XSL - Is there a way to "grep" and match on partial attribute string value?

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