xsl-list
[Top] [All Lists]

Re: Matching certain elements following an element

2005-11-09 06:41:31
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


--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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