Doh! I wasn't paying close enough attention to your newsSources XML. I would think it should work like this:
<x:forEach select="$newsSources//eachNewsSource[sourceID=$source]"> Because sourceID isn't an attribute of eachNewsSource, it's a child of it. You only use the '@' sign for referencing an attribute. If it was an attribute, the XML would look like: <allNewsSources> <eachNewsSource sourceID="am"> <sourceTitle>Apparel Magazine</sourceTitle> <sourceUrl>http://www.apparelmag.com/</sourceUrl> </eachNewsSource> </allNewsSources> In that case, what you had before should work: <x:forEach select="$newsSources//[EMAIL PROTECTED]"> But, if you don't want to change your XML, then I would remove the '@/' from in front of sourceID to alleviate confusion for the next guy. :) Chris -----Original Message----- From: Dylan MacDonald [mailto:[EMAIL PROTECTED] Sent: Monday, March 29, 2004 6:43 PM To: [EMAIL PROTECTED] Cc: 'Bill Siggelkow'; Johnson, Chris Subject: RE: XML XPath expression help 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.pr > l?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]