Subject: Re: [xsl] Output common IDs From: Suresh <suresh.chinta@xxxxxxxxx> Date: Sat, 29 Jan 2011 23:42:21 -0500 |
Understand I was making it more complicated than it needs to be. Thanks Brandon for your thorough explanation. Suresh On Wed, Jan 26, 2011 at 4:32 AM, Brandon Ibach <brandon.ibach@xxxxxxxxxxxxxxxxxxx> wrote: > > You don't really need to save the result of the first tokenize() call > to a variable, but you do need to tokenize on '\n', rather than '\t+', > in order to get each line in turn. You'll also need to save the value > of each item in the outer for-each so you can access it in the inner > for-each. > > Using normalize-space() before passing $FilteredPageIds to tokenize() > will get rid of the "blank" results caused by newlines at the start > and end of the text inside the "id" element. This change will also > pretty much eliminate the need for the $CurrentPageId variable. > Finally, add a newline after printing each match. > > <xsl:template match="/AllIds"> > <xsl:for-each select="tokenize(text(),'\n')"> > <xsl:variable name="CurrentId" select="current()"/> > <xsl:for-each > select="tokenize(normalize-space($FilteredPageIds),' ')"> > <xsl:if test="current() = > substring-before(normalize-space($CurrentId),' ')"> > <xsl:value-of select="concat($CurrentId,' ')"/> > </xsl:if> > </xsl:for-each> > </xsl:for-each> > </xsl:template> > > Taking advantage of XSLT's abilities to match against sets and filter > the results of tokenize() with a predicate, we have the following > version. > > <xsl:template match="/AllIds"> > <xsl:variable name="PageIds" > select="tokenize(normalize-space($FilteredPageIds),' ')"/> > <xsl:for-each > select="tokenize(text(),'\n')[substring-before(normalize-space(.),' ') > = $PageIds]"> > <xsl:value-of select="concat(.,' ')"/> > </xsl:for-each> > </xsl:template> > > -Brandon :) > > > On Wed, Jan 26, 2011 at 1:11 AM, Suresh <suresh.chinta@xxxxxxxxx> wrote: > > Hi, > > > > I have a xml file (PageIDs.xml) which contains several IDs. I have > > another file which contains ID and URI separated by a tab(AllIDs.xml) > > > > The question is, For each tokenized ID contained in PageIDs.xml file I > > want to test all IDs in AllIDs.xml and if ID test matches output > > matching line as text. This is simple for members in the list, I tried > > but I could not solve this using XSLT 2.0 > > > > PageIDs.xml > > ------------------- > > <id> > > BD6131A5-527C-11DF-A29F-00144F3EA4A4 > > DCA7D4CA-312D-11DF-A385-00144F3EA4A4 > > DD762167-312D-11DF-A385-00144F3EA4A4 > > DDB79742-312D-11DF-A385-00144F3EA4A4 > > 3D74A11A-839A-11DF-82F6-00144F3EA4A4 > > ... > > </id> > > > > AllIDs.xml > > --------------- > > <AllIds> > > DCA7D4CA-312D-11DF-A385-00144F3EA4A4 /accounts-overview/dkadoemfew > > 8ED29EEA-6460-11DF-8508-00144F3EA4A4 redirect.go?target=payxsxs > > EC2152EB-4593-11DF-BCB6-00144F3EA4A4 /accounts-overview/redirect.go?target=feljfweij > > 997A1170-474A-11DF-BCB6-00144F3EA4A4 redirect.go?target=woqiepoqie > > DD4AF2B0-312D-11DF-A385-00144F3EA4A4 /accounts-overview/e32i2je2 > > BD6131A5-527C-11DF-A29F-00144F3EA4A4 /contactus/about-contact > > ... > > </AllIds> > > > > This is the XSLT I've written... > > > > <?xml version="1.0" encoding="UTF-8"?> > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > exclude-result-prefixes="xs" version="2.0"> > > <xsl:output method="text"/> > > <xsl:variable name="FilteredPageIds" select="doc('pageIDs.xml')/id"/> > > > > <xsl:template match="/AllIds"> > > <xsl:variable name="AllListedIds" select="tokenize(text(),'\t+')"/> > > <xsl:for-each select="$AllListedIds"> > > <xsl:for-each select="tokenize($FilteredPageIds,'\n')"> > > <xsl:variable name="CurrentPageId" > > select="normalize-space(current())"/> > > <xsl:if test="contains($CurrentPageId, $AllListedIds)"> > > <xsl:value-of select="$AllListedIds"/> > > </xsl:if> > > </xsl:for-each> > > </xsl:for-each> > > </xsl:template> > > </xsl:stylesheet> > > > > This fails at contains because the item is a collection and I am not > > sure how to handle them. > > > > Expected output for IDs matching in PageIDs.xml, > > > > BD6131A5-527C-11DF-A29F-00144F3EA4A4 /contactus/about-contact > > > > Thanks. > > -- > > Suresh > -- Suresh
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Output common IDs, Brandon Ibach | Thread | [xsl] do somthing x times, Szabo, Patrick \(LNG |
Re: [xsl] Browser implementations o, Piet van Oostrum | Date | Re: [xsl] Browser implementations o, David Carlisle |
Month |