I'm trying to learn how/do two things here:
1) If the user searches for "Data" ($searchtext = "Data") the output should also include the fourth record because Field1 contains "all".
2) But the output of this same search should also exclude any records where Field1 contains "info" ($searchtext = "info"). You can see by the textsearch template that I have 3 case conversion variables that can be used to to include/exclude "All", "all", "ALL", "Info", "info", or "INFO"
A statement like this includes "all" but I can't figure out how to get it to also exclude "info"
<xsl:for-each select="record[*[name() = $searchfield][contains(., $ProperText) or contains(., $UCASETEXT) or contains(., $lcasetext) or ../Field1[contains(., 'ALL') or contains(., 'all') or contains(., 'All')]]]">
XML Data
[code=xml]
<?xml version="1.0"?>
<data>
<record>
<Field1>Data1-1</Field1>
<Field2>Data1-2</Field2>
<dtmField>200 8-01-28T01:01:00Z</dtmField>
</record>
<record>
<Field1>Info</Field1>
<Field2>Data2-2</Field2>
<dtmField>200 8-01-28T02:02:00Z</dtmField>
</record>
<record>
<Field1>Data3-1</Field1>
<Field2>Data3-2</Field2>
<dtmField>200 8-01-28T03:03:00Z</dtmField>
</record>
<record>
<Field1>all</Field1>
<Field2>Data4-2</Field2>
<dtmField>200 8-01-28T04:04:00Z</dtmField>
</record>
<record>
<Field1>All</Field1>
<Field2>Data5-2</Field2>
<dtmField>200 8-01-28T05:05:00Z</dtmField>
</record>
<record>
<Field1>info</Field1>
<Field2>Data6-2</Field2>
<dtmField>200 8-01-28T06:06:00Z</dtmField>
</record>
</data>
[/code]
<!-- Desired output -->
[code=xml]
<?xml version="1.0"?>
<data>
<record>
<Field1>Data1-1</Field1>
<Field2>Data1-2</Field2>
<dtmField>200 8-01-28T01:01:00Z</dtmField>
</record>
Record 2 is excluded because "Field1" = Info
<record>
<Field1>Data3-1</Field1>
<Field2>Data3-2</Field2>
<dtmField>200 8-01-28T03:03:00Z</dtmField>
</record>
<record>
<Field1>all</Field1>
<Field2>Data4-2</Field2>
<dtmField>200 8-01-28T04:04:00Z</dtmField>
</record>
<record>
<Field1>All</Field1>
<Field2>Data5-2</Field2>
<dtmField>200 8-01-28T05:05:00Z</dtmField>
</record>
Record 6 is excluded because "Field1" = info (notice the case is different)
</data>
[/code]
XSL Stylesheet
<!-- Include this just to show version and output method -->
[code=xml]
<?xml version="1.0"?>
<xsl:styleshe et xmlns:xsl="http ://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<!--
The "selected" value of thes parameters are filled in for this example. Normally
they are passed from an external ASP VBScript that processes inputs from another form where the values are input by the user.
-->
<xsl:param name="searchfie ld" select="Field1"/> <!-- Field to search -->
<xsl:param name="searchtex t" select="Data"/> <!-- Text to search for -->
<xsl:param name="sortbyfie ld" select="Field2"/> <!-- Field to sort output by -->
<xsl:param name="sortorder " select="Descend ing"/> <!-- Sort order ascending or descending -->
<xsl:template name="textsearc h">
<xsl:for-each select="record[*[name() = $searchfield][contains(., $ProperText) or contains(., $UCASETEXT) or contains(., $lcasetext)]]">
<xsl:sort select="*[name()=$sortbyf ield]" order="{$sortor der}"/>
<xsl:call-template name="resulttab le"/>
</xsl:for-each>
</xsl:template>
[/code]
1) If the user searches for "Data" ($searchtext = "Data") the output should also include the fourth record because Field1 contains "all".
2) But the output of this same search should also exclude any records where Field1 contains "info" ($searchtext = "info"). You can see by the textsearch template that I have 3 case conversion variables that can be used to to include/exclude "All", "all", "ALL", "Info", "info", or "INFO"
A statement like this includes "all" but I can't figure out how to get it to also exclude "info"
<xsl:for-each select="record[*[name() = $searchfield][contains(., $ProperText) or contains(., $UCASETEXT) or contains(., $lcasetext) or ../Field1[contains(., 'ALL') or contains(., 'all') or contains(., 'All')]]]">
XML Data
[code=xml]
<?xml version="1.0"?>
<data>
<record>
<Field1>Data1-1</Field1>
<Field2>Data1-2</Field2>
<dtmField>200 8-01-28T01:01:00Z</dtmField>
</record>
<record>
<Field1>Info</Field1>
<Field2>Data2-2</Field2>
<dtmField>200 8-01-28T02:02:00Z</dtmField>
</record>
<record>
<Field1>Data3-1</Field1>
<Field2>Data3-2</Field2>
<dtmField>200 8-01-28T03:03:00Z</dtmField>
</record>
<record>
<Field1>all</Field1>
<Field2>Data4-2</Field2>
<dtmField>200 8-01-28T04:04:00Z</dtmField>
</record>
<record>
<Field1>All</Field1>
<Field2>Data5-2</Field2>
<dtmField>200 8-01-28T05:05:00Z</dtmField>
</record>
<record>
<Field1>info</Field1>
<Field2>Data6-2</Field2>
<dtmField>200 8-01-28T06:06:00Z</dtmField>
</record>
</data>
[/code]
<!-- Desired output -->
[code=xml]
<?xml version="1.0"?>
<data>
<record>
<Field1>Data1-1</Field1>
<Field2>Data1-2</Field2>
<dtmField>200 8-01-28T01:01:00Z</dtmField>
</record>
Record 2 is excluded because "Field1" = Info
<record>
<Field1>Data3-1</Field1>
<Field2>Data3-2</Field2>
<dtmField>200 8-01-28T03:03:00Z</dtmField>
</record>
<record>
<Field1>all</Field1>
<Field2>Data4-2</Field2>
<dtmField>200 8-01-28T04:04:00Z</dtmField>
</record>
<record>
<Field1>All</Field1>
<Field2>Data5-2</Field2>
<dtmField>200 8-01-28T05:05:00Z</dtmField>
</record>
Record 6 is excluded because "Field1" = info (notice the case is different)
</data>
[/code]
XSL Stylesheet
<!-- Include this just to show version and output method -->
[code=xml]
<?xml version="1.0"?>
<xsl:styleshe et xmlns:xsl="http ://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<!--
The "selected" value of thes parameters are filled in for this example. Normally
they are passed from an external ASP VBScript that processes inputs from another form where the values are input by the user.
-->
<xsl:param name="searchfie ld" select="Field1"/> <!-- Field to search -->
<xsl:param name="searchtex t" select="Data"/> <!-- Text to search for -->
<xsl:param name="sortbyfie ld" select="Field2"/> <!-- Field to sort output by -->
<xsl:param name="sortorder " select="Descend ing"/> <!-- Sort order ascending or descending -->
<xsl:template name="textsearc h">
<xsl:for-each select="record[*[name() = $searchfield][contains(., $ProperText) or contains(., $UCASETEXT) or contains(., $lcasetext)]]">
<xsl:sort select="*[name()=$sortbyf ield]" order="{$sortor der}"/>
<xsl:call-template name="resulttab le"/>
</xsl:for-each>
</xsl:template>
[/code]
Comment