RE: [xsl] xslt 1.0 vs xslt 2.0 problem

Subject: RE: [xsl] xslt 1.0 vs xslt 2.0 problem
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 3 Sep 2008 18:36:26 +0100
//A[B[contains(@a, "foo")]]

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: mark bordelon [mailto:markcbordelon@xxxxxxxxx]
> Sent: 03 September 2008 18:28
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] xslt 1.0 vs xslt 2.0 problem
>
> Dear Gents:
>  
> I have looked everywhere for the solution to this problem and
> never seem to get what to the root of the issue. Here is the
> problem in a nutshell:
>  
> I have XML of this structure:
>  
> <resp>
>  <A>
>   <B a="foo bar bar"></B>
>   <B a="bar bar foo"></B>
>   <B a="boo far far"></B>
>  </A>
>  <A>
>   <B a="far boo"></B>
>   <B a="foo bar foo"></B>
>   <B a="bar foo bar"></B>
>  </A>
> </resp>
>  
> Using XSLT 1.0 (which I must, since I am constrained to use
> ASP.NET 2.0) I need to query the XML above to find all <A> if
> any of its children <B> fulfill a certain requirement.
>  
> //A[ contains(B/@a, "foo") ]
>
> What I am seeing is that this XSL only checks the FIRST child
> node's (B) attribute instead of checking all of them. In
> other words, I only get this:
> <resp>
>  <A>
>   <B a="foo bar bar"></B>
>  </A>
> </resp>
> ...instead of what I need, namely this:
> <resp>
>  <A>
>   <B a="foo bar bar"></B>
>   <B a="bar bar foo"></B>
>  </A>
>  <A>
>   <B a="foo bar foo"></B>
>   <B a="bar foo bar"></B>
>  </A>
> </resp>
>
> An attempt to alleviate this problem by amalgamating all the
> <B> together using string-join, i.e.
>
> //A[ contains( string-join(B/@a), "foo") ]
>
> error-out because string-join is XSLT 2.0
>
> So...what is the correct way to query through all child nodes
> using xslt 1.0?
>
> Thanks Guys!
>
> Sincerely,
> Mark Bordelon
> Getty Trust

Current Thread