|
| Re: use contains to search through multiple nodes. |
 |
Mon, 17 Mar 2008 16:26:31 +010 |
Guoqi Zheng wrote:
> I need to search keyword on <title>, also need to check
<category> =
> certain value.
> I use below XSLT to search title node, how do I check <category> node
> match one value? should I use apply-templates twice or is there other
> solutions?
You can use a predicate e.g.
> <xsl:apply-templates
> select="/agendas/agenda/data/content[contains(translate(.,$UC,$lc),
> $Keyword)]">
<xsl:apply-templates
select="/agendas/agenda[category =
$category]/data/content[contains(translate(.,$UC,$lc), $Keyword)]">
that filters out the agenda elements having a category child element
with content being equal to the variable or parameter named 'category'.
--
Martin Honnen --- MVP XML
|
| Post Reply
|
| Re: use contains to search through multiple nodes. |
 |
Mon, 17 Mar 2008 17:18:04 +010 |
Guoqi Zheng wrote:
> Great! what about if the category node is under the node of
<metadata>
> instead of directly under<agenda>? The agenda data can be something
like
>
> -------------------------------------- <agenda>
> <id>1112</id>
> <data>
> <content>
> <title>this is the title # 2</title>
> </content>
> <ref>GT355-332-234</ref>
> </data>
> <metadata>
> <category>Finance</category>
> </metadata>
> </agenda>
Change
>> <xsl:apply-templates
>> select="/agendas/agenda[category =
>> $category]/data/content[contains(translate(.,$UC,$lc),
$Keyword)]">
to
<xsl:apply-templates
select="/agendas/agenda[metadata/category =
$category]/data/content[contains(translate(.,$UC,$lc), $Keyword)]">
--
Martin Honnen --- MVP XML
|
| Post Reply
|
| use contains to search through multiple nodes. |
 |
Mon, 17 Mar 2008 23:05:43 +080 |
Dear Sir,
I am using MSXML and XSLT to search one XML. I can use "contains" to
search
through all child nodes, I do not know how can search into other nodes of
parent parent nodes.
I got below XML.
---------------------------XML--------------------------------
<agendas>
<agenda>
<id>1112</id>
<data>
<content>
<title>this is the title # 2</title>
</content>
<ref>GT355-332-234</ref>
</data>
<category>Finance</category>
</agenda>
.............
</agendas>
---------------------------End of XML ----------------------
I need to search keyword on <title>, also need to check <category> =
certain
value.
I use below XSLT to search title node, how do I check <category> node
match
one value? should I use apply-templates twice or is there other solutions?
----------------------------------
XSLT -----------------------------------------
<!-- upper and lower case for case incensitive search.-->
<xsl:variable
name="lc">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable
name="UC">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:template name="filter" match="/">
<!-- this will filter out data by keyword and/or datetime.-->
<xsl:apply-templates
select="/agendas/agenda/data/content[contains(translate(.,$UC,$lc),
$Keyword)]">
</xsl:apply-templates>
</xsl:template>
---------------------------------- END of
XSLT ----------------------------------
--
Guoqi Zheng
http://www.chinasoftware.eu
|
| Post Reply
|
| Re: use contains to search through multiple nodes. |
 |
Tue, 18 Mar 2008 00:13:19 +080 |
Great! what about if the category node is under the node of <metadata>
instead of directly under<agenda>? The agenda data can be something like
--------------------------------------
<agenda>
<id>1112</id>
<data>
<content>
<title>this is the title # 2</title>
</content>
<ref>GT355-332-234</ref>
</data>
<metadata>
<category>Finance</category>
</metadata>
</agenda>
-----------------------------
What should I do in this case then?
Thanks for great help.
Regards,
Guoqi Zheng
"Martin Honnen" <mahotrash@yahoo.de> дÈëÏûÏ¢
news:uBRvLNEiIHA.2304@TK2MSFTNGP05.phx.gbl...
> Guoqi Zheng wrote:
>
>> I need to search keyword on <title>, also need to check
<category> =
>> certain value.
>> I use below XSLT to search title node, how do I check <category>
node
>> match one value? should I use apply-templates twice or is there other
>> solutions?
>
> You can use a predicate e.g.
>
>> <xsl:apply-templates
>>
select="/agendas/agenda/data/content[contains(translate(.,$UC,$lc),
>> $Keyword)]">
>
> <xsl:apply-templates
> select="/agendas/agenda[category =
> $category]/data/content[contains(translate(.,$UC,$lc),
$Keyword)]">
>
> that filters out the agenda elements having a category child element
> with content being equal to the variable or parameter named 'category'.
>
> --
>
> Martin Honnen --- MVP XML
> http://JavaScript.FAQTs.com/
|
| Post Reply
|
|
|
|
|
|
|
|
|
|