Well, the brute force technique sometimes works.  After a million different
combinations, I got the XPath expression working by changing one thing in
the expression below.  Can you guess what it is?  A leading slash on the
sourceID attribute:

<x:forEach select="$newsSources//eachNewsSource[@/sourceID=$source]">

Thanks for the help and your time.

Dylan



-----Original Message-----
From: Bill Siggelkow [mailto:[EMAIL PROTECTED]
Sent: Friday, March 26, 2004 12:42 PM
To: [EMAIL PROTECTED]
Subject: Re: XML XPath expression help


Dylan, you could try using <x:set> to expose the sourceID as a variable
that then referenced in the inner <x:forEach> like the following:

<x:forEach select="$news//eachNewsArticle">
   <x:set select="sourceID" var="source"/>
   <tr>
     <td>
       <x:out select="articleDate" />
     </td>
     <x:forEach select="$newsSources//[EMAIL PROTECTED]">
...

It should work but I have not actually tried it so YMMV ...

Dylan MacDonald wrote:

> Hi -
>
> Last week I had a question about writing an XPath expression that would
> retrieve only the first few records from an XML source.  I got an
immediate
> response which worked perfectly.  Hopefully I'll have the same luck with
> this question.
>
> I have a JSP page that displays a list of random internet articles that I
> use in my corporate intranet.  The list includes the article title and a
> link to the article, as well as the source and the link to the source's
> website.
>
> While the articles are all unique, the sources are not.  Rather than
> duplicate the name and URL of each source for each article, I would create
a
> second XML file for the sources, assign a unique ID to each source and
then
> reference that ID in my articles XML file.  Then, on the JSP page itself,
I
> would import both XML files and then just use some kind of XPath
expression
> in the forEach statement to compare the IDs.  Well, this doesn't work, at
> least the way I did it.  It just gives me an error.
>
> I'm sure my code has many problems, but I think the two main ones are: can
> you even import two separate XML files with JSTL; and secondly, my XPath
> expression is probably wrong.  Anyway if anyone has any clues, I'd surely
> appreciate it.
>
>
> Below is my sample code:
>
> news.xml
>
> <allNewsArticles>
>       <eachNewsArticle>
>               <articleDate>October 31, 2003</articleDate>
>               <articleTitle>More quality along the supply chain</articleTitle>
>
>
<articleUrl>http://english.lz-net.de/news/webtechnews/pages/showmsg.prl?id=3
> 097</articleUrl>
>               <sourceID>lz</sourceID>
>       </eachNewsArticle>
> </allNewsArticles>
>
> ####
>
> newsSources.xml
>
> <allNewsSources>
>       <eachNewsSource>
>               <sourceID>am</sourceID>
>               <sourceTitle>Apparel Magazine</sourceTitle>
>               <sourceUrl>http://www.apparelmag.com/</sourceUrl>
>       </eachNewsSource>
> </allNewsSources>
>
>
> ####
>
> articles.jsp
>
> <c:import var="news_xml" url="news.xml" />
> <c:import var="newsSources_xml" url="newsSources.xml" />
> <x:parse var="news" xml="${news_xml}" />
> <x:parse var="newsSources" xml="${newsSources_xml}" />
>
> --snip--
>
> <x:forEach select="$news//eachNewsArticle">
>       <tr>
>               <td>
>                       <x:out select="articleDate" />
>               </td>
>       <x:forEach select="$newsSources//eachNewsSource[sourceID =
> '$news//eachNewsArticle/sourceID']">
>               <td>
>                       <a href="<x:out select='sourceUrl' />"><x:out 
> select="sourceTitle"
/></a>
>               </td>
>       </x:forEach>
>               <td>
>                       <a href="<x:out select='articleUrl' />"><x:out 
> select="articleTitle"
> /></a>
>               </td>
>       </tr>
> </x:forEach>
>
>
>
> Dylan MacDonald
> Senior Web Designer
> GNX
> phone: 415-283-3715
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to