xsl-list
[Top] [All Lists]

RE: Need help on that tricky selection

2004-05-25 12:29:20
-----Original Message-----
From: Christoph Wieseke [mailto:virtualize(_at_)gmx(_dot_)net]



Hi,

as you can maybe see, every <hst> element belongs to a
<ort> element and can be identified by its <ort_nr>

what i want to do is: select all the <ort> elements, complete
with all their childs, where the <hst> is equal to the <ort_nr>
and throw the rest away.


Well, you can use a key for this. The following key declaration

<xsl:key name="ort-by-hst" match="ort"
         use="ort_nr" />

in combination with, for example

key('ort-by-hst','1031501')

will return you (all) ort nodes having '1031501' as value for their ort_nr
child node.

One you have this, the solution comes closer...

<xsl:stylesheet ...>

<xsl:key name="ort-by-hst" match="ort"
         use="ort_nr" />

<xsl:template match="/">
  <xsl:apply-templates />
</xsl:template>

<xsl:template match="hst_list">
  <xsl:apply-templates />
</xsl:template>

<xsl:template match="hst">
  <xsl:value-of select="concat(.,'&#x0A;')" />
  <xsl:apply-templates select="key('ort-by-hst',.)" />
</xsl:template>

<xsl:template match="ort">
  <xsl:value-of select="ort_name" />
</xsl:template>

<xsl:stylesheet>

If I'm not overlooking anything, this XSLT when applied to your source XML
will yield an output like:

1031501
HBF Gleis 1
(next ort_name)
(yet another ort_name)
1031401
TOKI
(next ort_name)
(yet another ort_name)



Hope this helps!

Greetz,

Andreas



<Prev in Thread] Current Thread [Next in Thread>