|
Subject: Re: [xsl] Matching certain elements following an element From: Ramon Buckland <ramon@xxxxxxxxxxxxxxx> Date: Thu, 10 Nov 2005 00:41:31 +1100 |
Hi Matthew,
I am sure someone else on this list could do a better job,
code a far elebant solution, but this does
work with the sample you gave.
<xsl:param name="section" select="'bar'"/>
<xsl:template match="/">
<!-- dump put what the following h2 is -->
<xsl:message><xsl:value-of select="//h2[a/text() =
$section]/following::h2"/></xsl:message>
<!-- select Only the nodes that are following-siblings of me, or
of my ancestor (not my child or their child nodes, they
cop-of will do that for me) ..
where they have a h2 element that follows, that has the
same id as the one
following the section we are interested in
-->
<xsl:copy-of select="//h2[a/text() =
$section]/ancestor::*/following-sibling::*
[
(generate-id(following::h2[1]) = generate-id(//h2[a/text() =
$section]/following::h2[1]))
]
|
//h2[a/text() = $section]/following-sibling::*
[
(generate-id(following::h2[1]) = generate-id(//h2[a/text() =
$section]/following::h2[1]))
]
"/>
</xsl:template>
Regards ..
Ramon
On Fri, 2005-11-04 at 12:24 -0800, Matthew Fonda wrote:
> Hello,
>
> I have an interesting problem here, and I am unsure how to go about
> solving it.
>
> I have the following xml:
>
> <f>
> <b>
> <h2><a>foo</a></h2>
> <p>......</p>
> <p>......</p>
> <p>......</p>
> <img>....</img>
> <p>......</p>
> <div>
> <h2><a>bar</a></h2>
> <ul>
> <li>.....</li>
> <li>.....</li>
> <li>.....</li>
> <li>.....</li>
> </ul>
> <p>...</p>
> <h2><a>baz</a></h2>
> </div>
> <foo>....</foo>
> <a>......</a>
> <p>......</p>
> <p>......</p>
> <baz/>
> </b>
> </f>
>
> I need to pass the template a parameter, I will call this $section, and then I need the stylesheet to return whatever is in that section. So for example, if $section = 'foo', it would match the h2/a/text() = foo, and return everything up to the next h2/a. So it would return:
> <p>......</p>
> <p>......</p>
> <p>......</p>
> <img>....</img>
> <p>......</p>
>
> Or if $section = 'baz', I need to get:
> <foo>....</foo>
> <a>......</a>
> <p>......</p>
> <p>......</p>
> <baz/>
>
> And so on. Now, the problem is, there is <div> elements mixed in there. I want to completely ignore these. Any ideas on how I could go about achieving this?
>
> Thanks,
> -- Matthew
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Matching certain elements, Wendell Piez | Thread | [xsl] Converting siblings into chil, Woods, Christopher |
| RE: [xsl] Dynamic XPath Expression, Michael Kay | Date | [xsl] Mask * for translate function, Ferdinand Soethe |
| Month |