🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.xml
Article #9754

Re: XSLT wybranie node'ów odpowiadających innym node'om

#9754
From: szomiz
Date: Thu, 13 Mar 2008 12:15
50 lines
2488 bytes
Użytkownik "zbyszek malec" <zbyszanna@gazeta.SKASUJ-TO.pl> napisał w 
wiadomości news:frb54a$gcc$1@inews.gazeta.pl...
> Witam
> Mam następujący dokument xml:
>
> <data>
> <usages>
> <usage table="A"/>
> <usage table="B"/>
> </usages>
>
> <tables>
> <table name="A"/>
> <table name="B"/>
> <table name="C"/>
> </tables>
> </data>
>
> Teraz chciałbym napisać takie XSLT żeby mi wybrało elementy z tables 
> takie,
> które występują w elementach usage, tzn. takie że atrybut table w usage 
> jest
> taki sam jak atrybut name w table. Nie bardzo mam pomysł jak to zrobić.
> Próbowałem coś na kształt:
> <xsl:for-each select="tables/table[count(usages/usage[@table=@name])=0]">
> </xsl:for-each>

select="table[/data/usages/usage[@table=current()/@name]]"

I takie wyrazenie oddaje wprost twoje wymaganie.

Mozna to jednak zrobic zarowno sprytniej jak i wydajniej.

<xsl:key name="uTables" match="/data/usages/usage" use="@table"/>

    ...
    <xsl:apply-templates select="table"/>
    ...

<xsl:template match="table"/>
<xsl:template match="table[key('uTables',@name)]">
    ...
</xsl:template>

> ale jak widać bez powodzenia. Da się to zrobić w XSLT?

Jak widac da sie. Co wiecej, nazwa klucza jest /concat'owalnym/ stringiem. 
Co mozna wykorzystac do quasi-dynamicznego parametryzowania wywolan ;)

sz. 
Technical Details
Message-ID: <frb5us$bo5$1@atlantis.news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!news.tpi.pl!not-for-mail
References: <frb54a$gcc$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!news.tpi.pl!not-for-mail
From: "szomiz" <szomiz@kocha.dostawac.reklamy.przez.net>
Newsgroups: pl.comp.xml
Subject: Re: XSLT wybranie node'ów odpowiadających
 innym node'om
Date: Thu, 13 Mar 2008 13:15:12 +0100
Organization: TP - http://www.tp.pl/
Lines: 52
Message-ID: <frb5us$bo5$1@atlantis.news.neostrada.pl>
References: <frb54a$gcc$1@inews.gazeta.pl>
Reply-To: "szomiz" <xml@op.pl>
NNTP-Posting-Host: hau2.internetdsl.tpnet.pl
X-Trace: atlantis.news.neostrada.pl 1205410588 12037 79.187.20.2 (13 Mar 2008 12:16:28 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Thu, 13 Mar 2008 12:16:28 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.3138
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198
X-RFC2646: Format=Flowed; Original
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit