Altova Mailing List Archives>Archive Index >xsl-list Archive Home >Recent entries >Thread Prev - [xsl] Joining xml documents on the fly >Thread Next - Re: [xsl] Joining xml documents on the fly Re: [xsl] Joining xml documents on the flyTo: xsl-list@-----.------------.--- Date: 6/8/2009 2:42:00 PM Ok, now I've got a new twist on the same type of data set.
Now I want to find all of the people in <project_staff_roles> who are
listed more than, arbitrarily, 5 times.
I get somewhere around this:
<xsl:variable name="common"
select="$project_staff_roles/project_staff_role/@staff_id[count($project_staff_roles/project_staff_roles/@staff_id
= .) > $common_count]"/> and of course this doesn't work.
I'm sorry, I'm just really struggling with the underlying concepts here.
I think I'm trying to approach this from an SQL point of view and I'm
just not able to re-frame my thought process correctly.
Thanks much again.
Joelle
Joelle Tegwen wrote:
> Ok, I'm in totally over my head here. I'm hoping someone can help me out.
>
> I've got 2 external (reference) documents I'm including into my
> stylesheet.
>
> One is a list of staff. It looks like this (edited for brevity):
>
> <people>
> <staff staff_id="123456789" alpha_key="A" sort_key="AberyBrian">
> <display_name>Brian H Abery</display_name>
> </staff>
> <staff staff_id="987654321" alpha_key="A" sort_key="AlbusDeb">
> <display_name>Deb Albus</display_name>
> </staff>
> <staff staff_id="456321789" alpha_key="A" sort_key="AltmanJason">
> <display_name>Jason R Altman</display_name>
> </staff>
> </people>
>
> And the other is the three way join between staff, projects and roles
> <project_staff_roles>
> <project_staff_role project_id="1" staff_id="123456789"
> role_id="staff">
> <staff staff_id="123456789" alpha_key="A" sort_key="AberyBrian">
> <display_name>Brian H Abery</display_name>
> </staff>
> </project_staff_role>
> <project_staff_role project_id="1" staff_id="123456789"
> role_id="director">
> <staff staff_id="123456789" alpha_key="A" sort_key="AberyBrian">
> <display_name>Brian H Abery</display_name>
> </staff>
> </project_staff_role>
> <project_staff_role project_id="2" staff_id="987654321"
> role_id="staff">
> <staff staff_id="987654321" alpha_key="A" sort_key="AlbusDeb">
> <display_name>Deb Albus</display_name>
> </staff>
> </project_staff_role>
> </project_staff_roles>
>
> I want to break this into two groups based on the current project_id.
> So if I'm viewing project_id=1
> I want two groups of people
>
> Project Staff:
> <people>
> <staff staff_id="123456789" alpha_key="A" sort_key="AberyBrian">
> <display_name>Brian H Abery</display_name>
> </staff>
> </people>
>
> Non-Project-Staff
> <people>
> <staff staff_id="987654321" alpha_key="A" sort_key="AlbusDeb">
> <display_name>Deb Albus</display_name>
> </staff>
> <staff staff_id="456321789" alpha_key="A" sort_key="AltmanJason">
> <display_name>Jason R Altman</display_name>
> </staff>
> </people>
>
> I've got the following variables in my document:
> <xsl:variable name="staff" select="document($ref_staff)/people"/>
> <xsl:variable name="staff_roles"
> select="document($ref_project_staff_role)/project_staff_roles/project_staff_role[@role_id='staff']"/>
>
> <xsl:variable name="project_staff"
> select="$staff_roles[@project_id=$[project_id]/staff"/>
> <xsl:variable name="non_project_staff" select="?????"/>
>
> How do I even go about thinking about this? I've tried googling it but
> I have no idea what to search on. I've tried various iterations of
> keys, etc but I just can't get it.
>
> The final xslt that gives the desired output is:
> <xsl:if test="count($project_staff) > 0">
> <fieldset class="span-18 last col-wrap">
> <legend class="quiet">
> <xsl:value-of
> select="ancestor::project/associates/associate/title"/>
> People</legend>
> <xsl:call-template name="layout_3column">
> <xsl:with-param name="objects"
> select="$project_staff"/>
> </xsl:call-template>
> </fieldset>
> </xsl:if>
> <xsl:if test="count($non_project_staff) > 0">
> <fieldset class="span-18 last col-wrap">
> <legend class="quiet">All Other People</legend>
> <div id="tabs">
> <ul>
> <xsl:for-each
>
> select="$staff/staff/@alpha_key[generate-id()=generate-id(key('alpha',
> .))]">
> <xsl:if
> test="count($non_project_staff[@alpha_key = current()]) > 0">
> <xsl:call-template name="tab_link">
> <xsl:with-param name="alpha_string"
> select="."/>
> </xsl:call-template>
> </xsl:if>
> </xsl:for-each>
> </ul>
> <xsl:for-each
>
> select="$staff/staff/@alpha_key[generate-id()=generate-id(key('alpha',
> .))]">
> <xsl:if
> test="count($non_project_staff[@alpha_key = current()]) > 0">
> <xsl:call-template name="tab_data">
> <xsl:with-param name="alpha_string"
> select="."/>
> <xsl:with-param name="objects"
>
> select="$non_project_staff[@alpha_key = current()]"/>
> </xsl:call-template>
> </xsl:if>
> </xsl:for-each>
> </div>
> </fieldset>
> </xsl:if>
>
>
> I hope this is clear. Any help would be much appreciated.
>
> Thanks in advance.
> Joelle
>
>
>
>
> --~------------------------------------------------------------------
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
> To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
> or e-mail: <mailto:xsl-list-unsubscribe@l...>
> --~--
>
>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe@l...>
--~--
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
